Rails関連のことを調べてみた2019年11月10日

Rails関連のことを調べてみた2019年11月10日

macでmysql2がbundle installできない時

`bundle install`でmysql2をインストールしようとしたらエラーになったので解決策のメモ。

後にこの問題に関する記事はたくさん見つけられたのだが、自分なりに色々と調べたのでメモしておく。

# 各種バージョン
macOS Mojave 10.14.6
Ruby 2.6.2
bundler 1.17.2

# はじめに結論
下記のいずれかを実行を実行した後に`bundle install`で解決。

#### macOSが新しい場合(`macOS Mojave 10.14.6`で確認)は下記実行。

“`
bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib”
“`

#### macOSのバージョンが古い場合はこっちでいけるらしい。

“`
bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib –with-cppflags=-I/usr/local/o

元記事を表示

Railsのvalidationの実行過程を調べる

# 環境
Ruby 2.6.5
Rails 6.0.1

# 事の発端
ある時、継承したモデルに対して、 `validation` を書こうとして問題は起きました…

例えば、下記のような `User` モデルが存在したとします。

“`ruby:user.rb
class User < ApplicationRecord validates :name, presence: true validates :email, presence: true validates :password, presence: true validates :card_num, presence: true end ``` クレカの番号をDBに生で持つなんて恐ろしいですが、サンプルなので今回は置いておきます。 元々、課金ユーザーのみが対象でしたが、ある時、無課金ユーザーを対象とするために、新しく無課金ユーザーのモデルを作成したとします。無課金ユーザーはクレカの番号を登録しなくても使えるように `:card_num` に対する `validation` を上書きしようと考えて下記の

元記事を表示

 Hamlの基本箇所についての復習②(=)

#はじめに
[前回の記事](https://qiita.com/Moon1126Snow/items/b87b0d7cfaa97ba6da6c)が想像以上に多くの方に読んでいただけたので、続きを書こうと思います。
今回は、***HamlにおけるRuby文の書き方***です。
#実行
Rubyのビューファイル(html.erb)では、Rubyを下記のように挿入していました。

“`ruby
移動する
“`

同じコードをHamlで書くと次のようになります。

“`haml
= link_to ‘移動する’, ‘http://****’
“`

一番大きな違いは“`<%= %>“`がなくなり、“`=“`だけになっているところです。
こうすればとてもスッキリしたコードになりますが、最初のうちは読みにくい事があるので練習が必要です。

#終わりに
Hamlに限らず、プログラミングの学習記事はとても多くの内容を盛り込んであることが多いです。
そのため、中級者になればありがたくなりますが、初学者にとっては「どれが必要な情報なのか

元記事を表示

form_with あんたはすごい。

#form_withさん
フォーム作成の際に非常に便利なことで知られるform_withさん
使い方を簡単にまとめます。


“`new.html.erb
<%= form_with model: @user do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<% end %>
“`
①コントローラーで作成したインスタンスをform_withの後ろにセットします。
→model: @user

②好きなフォームを中に入れ込みます。カラムもセット。
→<%= form.text_field :name %>

③送信すると、あとはform_withさんが勝手にやってくれます。postとかpatchとか書かなくてOK。有能。
→新インスタンスならcreateアクションへ
→既存インスタンスならupdateアクションへ

フォームはたくさん種類があるので、気になった方はこちらへ。
> https://www.pikawaka.com/rails/form_with

元記事を表示

Sidekiqをモニタリングする [翻訳]

# Sidekiqをモニタリングする

最終更新 2019/10/31 編集者 RKushnir

運用中のSidekiqプロセスを監視するツールを使用して、常に稼働しており、メモリやCPUを過度に使用していないことを確認することをお勧めします。
[Inspeqtor](https://github.com/mperham/inspeqtor)を作ったのは、利用可能な既存のツール(たとえば、monit、god、bluepill)が気に入らなかったためです。
私のおすすめは、

1. [Upstart](https://github.com/mperham/sidekiq/tree/master/examples/upstart)または[Systemd](https://github.com/mperham/sidekiq/tree/master/examples/systemd)を使用してSidekiqを起動/停止する。 こうすることで、Ruby VMがクラッシュした場合、プロセスはすぐに再起動します。

2. Inspeqtorを使用してCPUとメモリの使用量を監視し、必要に応じてS

元記事を表示

Ruby on Rails テーブル作成手順

Ruby on Railsでテーブルを作成する方法を記述します。

1:マイグレーションファイル作成

テーブルの設計図であるマイグレーションファイルを生成します。

テーブル名
User

カラム一覧

| カラム名 |データ形 |
|:—————–|——————:|
| id | integer |
| name | string |
| password | string |
| created_at | datetime |
| updated_at | datetime |

“`console:console
rails g model User name:string password:string
“`

*id、crated_at、updated_atは自動的に作られる

元記事を表示

rails db:rollbackって一つずつしか差し戻せないんだよって話

先日、学習中のスクールで同期からテーブルのカラムを間違えてしまったので修正したい、どうすればよいかと聞かれ、即座にrollbackを使うんだよ!と答えられなかったことが悔しかったので備忘録として。

## そもそもrollbackとは?
rails db:migrateを行うことでマイグレーションファイルに記載の内容でデータベースのテーブルにカラムを反映させることができる。
が、カラム名を修正する際にはただマイグレーションファイルを編集してrails db:migrateを再実行するだけでは修正はされない。

その為、一度テーブルを差し戻し、マイグレーションファイルを修正してから再度rails db:migrateを実行する必要がある。
その差し戻しの際に使われるのが**rails db:rollback**である。

## 初めて知ったrollbackの仕様
rails db:migrate:statusでマイグレーションファイルの状態を確認。

$ rails db:migrate:status
Status Migration ID Migratio

元記事を表示

bundle install でnokogiriのエラー

# 環境
mac os catalina:10.15
ruby:2.4.3
bundler:1.16.1

# bundle installでエラー
チュートリアルのサンプルアプリを動かそうとしたら、以下のように`Installing nokogiri 1.10.5 with native extensions`中にエラーが発生。

“`
Fetching nokogiri 1.10.5
Installing nokogiri 1.10.5 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/Users/takeru/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/nokogiri-1.10.5/ext/nokogiri
/Users/takeru/.rbenv/versions/2.4.3/bin/ruby -r ./siteconf20191109-66914-512

元記事を表示

【Rails】エスケープ処理をControllerで行いたい(XSS対策)

研修でjquery(ajax)を用いたチャットアプリを開発中、先輩にXSS対策について指摘していただきました。
最初はjquery側でエスケープ処理をすることを考えましたが、調べるとrailsのcontrollerでも出来ることがわかったのでまとめておきます。

“`sample.rb
ERB::Util.h(“

“)
#=> “<form> </form>”

ERB::Util.html_escape(“

“)
#=> “<form> </form>”
“`
上記の2つは全く同じ動きをします。

##参考
[module ERB::Util](https://docs.ruby-lang.org/ja/latest/class/ERB=3a=3aUtil.html#M_H)
[RailsエンジニアのためのXSS入門](https://qiita.com/toduq/items/b88716bad35865ef2dc9)

##感想
Railsのレールに乗った開発しかしてこなかった

元記事を表示

Bundlerの1系と2系って何が違うの?

Bundlerのバージョンの違いについて、本家の[Bundler 2.0のリリースアナウンス](https://bundler.io/blog/2019/01/03/announcing-bundler-2.html)をもとに簡単に調査してみた。

# Bundler2系の変更リスト

– Ruby2.3より前のバージョンのサポートを廃止
– RubyGem3.0.0より前のバージョンのサポートを廃止
– [こっち](https://bundler.io/guides/bundler_2_upgrade.html)だとRubyGems2.5.0以上でなければならないと書いてある…どっちだ?
– githubからgemのソースを取得する際に`https`でアクセスするように(1系は`http`だった模様)
– Errorとwarningが`STDERR`に出力されるように
– Bundlerバージョンの自動切り替え
– `bundle install`実行の際、アプリのGemfile.lockに書かれたBundlerのバージョン(`bundle install`した時に記録さ

元記事を表示

rails 発展その5 カラムの追加 単語の区切り 文字数制限

細かい知識を得たので投稿します。

## カラムの追加

“`bash:ターミナル
$ rails g migration AddIntroductionToテーブル名 追加したいカラム名:データ形式

$ rails g migration AddIntroductionToItems introduction:string

マイグレーションファイルが作成されるので

 $ rake db:migrate
“`

## スネークケースとキャメルケース
プログラムが単語の区切りを認識する際、2通りの方法があります。
スネークケースは、例えば「sample_yes_no」のように「_」で単語を区切る方法です。
キャメルケースは、「SampleYesNo」のように単語の頭文字を大文字にすることで単語を区切ります。

## inputのヘルパーメソッド text_field:maxlengthオプション
inputの文字数制限を起こすオプションです。

“`html:html

<%= f.text_field :name, autofocus: t

元記事を表示

「gem update –system」と「gem update」の違い

– `gem update –system`
– RubyGems(gemコマンド)自体のバージョンアップをする
– `gem update`
– インストールされている各gemのバージョンアップをする
– `gem update [GEMNAME]`で特定のgemをバージョンアップすることもできる

こういうの意外と一発でググれなくて困る…

他にもプレリリース版のgemにアップデートしたりするオプションなど色々ある模様
https://guides.rubygems.org/command-reference/#gem-update

元記事を表示

【rails】select_tagの使い方

セレクトボックスを設置して、paramsでデータをとるための処理の方法のまとめ。

## select_tagとは
railsに存在する、セレクトタグを表示するためのメソッド

ドキュメント
https://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag

## 記法
ドキュメントには以下のように記載されている。

“`rb
select_tag(name, option_tags = nil, options = {})
“`

– nameはparams -> 値を拾うための文字列
– option_tag -> optionタグを用いてセレクトタグに表示する文字列、送る値を設定
– options -> 設定すれば、複数選択できるようにしたり、空欄を含めたりできる

また、option_tagsはoptions_for_selectを用いた方が、コードがわかりやすくなる。
## options_for_selectとは
ドキュメント
https://apidock.com/rails/ActionVi

元記事を表示

【Rails】ランキング機能の実装

#ランキング機能について
ECサイトを見てるとランキング機能があふれていますね
例えば、、、
・ 新着ランキング
・ いいねランキング
・ 売り上げランキング
などです
この機能を応用すると様々ことができます。
是非、この記事を理解してランキング機能を実装してください!!
#実装方法の説明
実装環境はSNSサイトのようにユーザーのUserと投稿のPostテーブルがあり、いいね機能が実装されている状態です
##概要
Postのいいね数でランキングを作る
そのためにコントローラーでいいね数が多い順に投稿されたPostを取得する方法について解説します。
Viewでの表示方法についてはご自身で実装方法に対応させてください。
もし、いいね機能がわからない方がおられましたの実装方法はこちらの記事を参考にして実装してみてください!!
##具体的な実装方法の説明

“`Ruby:
Post.find(“いいね数の多いPostのid”)
“`

findメソッドはIDでPostを探すメソッドですので、
いいね数の多いPostのidの取得して検索します。

“`Ruby:
Favorite.grou

元記事を表示

エンジニア歴2ヶ月目で新規プロダクト開発を任された時にセットアップしたこと

[エンジニアとして自社開発企業に入社](https://qiita.com/kenzoukenzou104809/items/0c77af2e9695c3eb8466)して2ヶ月目で新規のプロダクト開発を任せてもらえることとなりました。その時に先輩に教えてもらいながら、セットアップしたことなどをまとめてみます。

## 対象

この記事はエンジニアになるために**現在ポートフォリオ作成中の方**などの参考になるかと思います。以下で書いている内容のセットアップを行えば、「ある程度綺麗なコード」を書けるからです。

## .editorconfigの設定

`EditorConfig`は複数の開発者が関与する時に、コーディングスタイルの一貫性維持に役立ちます。僕はVS Codeを使っているので、プラグインをインストールすることで対応しました。

– [EditorConfig](https://editorconfig.org/)
– [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName

元記事を表示

Railsでポートフォリオを作ってみよう! vol.3 (RSpec・FactoryBot編 前編)

前回、データベースの作成とUsermodelの作成を行った。
また、Usermodelに入ってくる情報に対するバリデーションも作成したのが前回までのあらすじ。
今回はバリデーションという機能が正しく実装されたことを確認するために、「テスト」と呼ばれるものを作成していきたい。
#テストとは
>製作したアプリケーションが正常な動作を行なっているかの確認を行うこと

となっている。
テストを書くことによりバグやエラーを本番環境に落とす前に気づくことができる上に、リファクタリングの難易度も大きく下がることになる。
また、一言にテストと言っても、どういうタイミング(テスト駆動・一括テスト)で書いたほうが適しているか等、複雑な状況があるので詳しくはRailsTutorialの第3章の「テストから始める」を参照にしてみると良いかもしれない。
[RailsTutorial(テストから始める)](https://railstutorial.jp/chapters/static_pages?version=5.1#sec-getting_started_with_testing)

上記URLの通り、Ra

元記事を表示

Deviseとは-コンセプト〜使い方まで 「README参照」

#はじめに
Deviseの使用にあたり、READMEを確認いたしました。
折角なので、備忘録もかねて以下にまとめてみます。
(誤認識などございましたら、ご指摘いただけますと幸いです!)

##Deviseとは
Deviseとは、Railsのための認証ソリューションです。
(Gemの一種ですね。)

特徴
-Rack base
*Rack:Rubyにおけるサーバとアプリケーション/フレームワーク間のインターフェースの役割を果たすライブラリ

-Railsエンジンに基づいたMVCソリューション

-複数のモデルに対して同時にサインイン可能

-モジュール性の概念に基づいている:本当に必要なものを使用してください
*モジュール性:モジュールによって構成される範囲の程度を示すもの。
モジュール性が低い=>プログラム内の任意の2つの部分が相互に関連することが多い場合
モジュール性が高い(devise)=>モジュール間のインターフェイスが定義されていて、それ以外の相互関連が存在しない

###Deviseを構成する10個のモジュール
-Database Authenticatable
:ユーザー

元記事を表示

Cannot allocate memory – fork(2) 対策

自動デプロイでエラー。unicornでエラーしていたので備忘録として書きます。
解釈がおかしければご指摘ください。

“`unicorn.stderr.log
(省略)Cannot allocate memory – fork(2)
“`
上記の意味はメモリエラーです。
メモリが足りない時にされていることとしてメモリースワップがありますが・・・
AWS EC2 Linux は設定されていません。
(コマンド**$ free** で表示されますが、初期ではswapのところは0になってます)

設定の仕方は以下のページを参考にしました。先駆者様本当にありがとうございます。
[【Linux】スワップ領域(ファイル)の作り方](http://mktktmr.hatenablog.jp/entry/2016/09/28/055629)

**※ $ mkswap /Swapfile の際に時間がかかるのでご注意ください**
上記ページの処理をすれば1GBのスワップ領域が確保されます。

元記事を表示

params ストロングパラメーター MVC

paramsとは

ページをまたいでデータを活用したいときに活用される

“`ruby
26: def create
=> 27: binding.pry
28: @task = Task.new(task_params.merge(user_id: current_user.id))
29:
30: if params[:back].present?
31: render :new
32: return
33: end
34: if @task.save
35: TaskMailer.creation_email(@task).deliver_now
36: SampleJob.perform_later
37: flash[:notice] = “タスク#{@task.name}を登録しました”
38: redirect_to tasks_url
39: else
40: render

元記事を表示

開発環境で2人以上のユーザーでログインして動作確認をしたい(チャットアプリなど)【Rails】

##最初試したこと

機器を2台用意して同じssidに接続し、以下のコマンドを打つ

“`
$ rails s -b 0.0.0.0
“`
xxx.ooo.xxx.ooo:3000 に接続(xxx.ooo.xxx.oooは自分が接続しているssidのipアドレス)
ipアドレスはmacならoptionキーを押しながらメニューバーのwifiマークを押したら出てきます!

参考[【Rails】ローカル開発環境で他の端末からrails serverに接続する方法](https://qiita.com/yusaku_/items/4e41b556b55ff65b826b)

##機器が一台でも試せる方法
safariとchromeなど違うブラウザでlocalhostに接続したら出来ました!
chromeの普通のウィンドウとシークレットウィンドウを使っても出来ます!

元記事を表示

OTHERカテゴリの最新記事