概要
今更ながらデバックを手助けてくれる
「binding.pry」さんを知り、実際にデバックしてみました。
私がrails初学者ということもあり、
導入出来ても、デバックの仕方が分からず思ったより時間がかかりました。
目的
- 手順別に分かりやすく説明
- デバック方法まで記述
- メモ代わり
環境
rails:5.2.3
ruby:2.5.6p201
binding.pryの導入
group :development, :test do
gem 'pry-rails'
gem 'pry-byebug'
end
※gemfileに記述後、bundle installを忘れずに!
docker-compose.ymlの書き換え
web:
tty: true
stdin_open: true
これでコンテナ内の標準入出力をローカルマシンのターミナルにアタッチしてくれるらしいです。
ここまでbinding.pryの環境が揃いました!
次は実際にデバックしてみます。
実際にデバックしてみよう!
デバックしたい部分にbinding.pryを記述
今回はコメント機能を作り、コメントを投稿する際(createアクション)のbinding.pryを使ってparamsの中身を確認していきます。
テキストエディターでデバックしたメソッドの部分にbinding.pryを記述します。
こんな感じ。
ローカル環境で確認
ローカル環境でデバックしたいメソッドを実行します。
今回の場合だとcreateアクションをローカルで実行。
これでコメント投稿します。
ボタンを押すと、ローカルの環境が読み込みをします。
docker-compose upしたターミナルを確認すると、このように出てくると思います。
web_1 | 26: def create
web_1 | 27: binding.pry
web_1 | => 28: @comment = Comment.create params.require(:comment).permit(:content, :image).merge(user_id: current_user.id)
web_1 | 29: if @comment.save
web_1 | 30: redirect_to('/comments')
web_1 | 31: else
web_1 | 32: redirect_to('/comments/new')
web_1 | 33: end
web_1 | 34: end
コンテナにアタッチ
別ターミナルでdocker ps
を実行。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fdf3a1fd61c baukis_rails "prehook 'ruby -v'..." 5 seconds ago Up 4 seconds 0.0.0.0:3333->3000/tcp baukis_rails_1 # attachしたいのはこれ
cb68afd353c8 baukis_spring "prehook 'ruby -v'..." 5 seconds ago Up 4 seconds baukis_spring_1
7b86e4f07b20 postgres:9.6.2 "docker-entrypoint..." 6 seconds ago Up 7 seconds 0.0.0.0:5432->5432/tcp baukis_db_1
アタッチするコンテナの名前を確認して
docker attach コンテナ名
何回かエンターキーを押すとこのような感じになると思います。
[1] pry(#<CommentsController>)>
[2] pry(#<CommentsController>)>
[3] pry(#<CommentsController>)>
出てきたpry(#<CommentsController>)>
後に確認したいもの(paramsとか)を入れると確認できます。
[5] pry(#<CommentsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"ehW0cn0HjmT11Z2NprSp9G/IeJE0P97ylBfIrLOOzCsG1S2E6k/BSmRfc+JQsVUSEG1+FtGVjpQTXku1Th6m3w==", "comment"=>{"content"=>"テスト"}, "commit"=>"登録する", "controller"=>"comments", "action"=>"create"} permitted: false>
参考記事
docker-compose上のRailsのデバッグを行う
docker-composeで作ったrailsの環境でbinding.pryを使えるようにする話