12
8

More than 3 years have passed since last update.

[rails] [初学者向け]docker環境でbinding.pryを使ってデバックする方法

Posted at

概要

今更ながらデバックを手助けてくれる
binding.pry」さんを知り、実際にデバックしてみました。
私がrails初学者ということもあり、
導入出来ても、デバックの仕方が分からず思ったより時間がかかりました。

目的

  1. 手順別に分かりやすく説明
  2. デバック方法まで記述
  3. メモ代わり

環境

rails:5.2.3
ruby:2.5.6p201

binding.pryの導入

Gemfile.
group :development, :test do
  gem 'pry-rails'
  gem 'pry-byebug'
end

※gemfileに記述後、bundle installを忘れずに!

docker-compose.ymlの書き換え

docker-compose.yml
web:
  tty: true
  stdin_open: true

これでコンテナ内の標準入出力をローカルマシンのターミナルにアタッチしてくれるらしいです。

ここまでbinding.pryの環境が揃いました!
次は実際にデバックしてみます。

実際にデバックしてみよう!

デバックしたい部分にbinding.pryを記述

今回はコメント機能を作り、コメントを投稿する際(createアクション)のbinding.pryを使ってparamsの中身を確認していきます。

テキストエディターでデバックしたメソッドの部分にbinding.pryを記述します。
こんな感じ。
スクリーンショット 2020-03-09 19.44.48.png

ローカル環境で確認

ローカル環境でデバックしたいメソッドを実行します。
今回の場合だとcreateアクションをローカルで実行。
スクリーンショット 2020-03-09 19.46.41.png
これでコメント投稿します。
ボタンを押すと、ローカルの環境が読み込みをします。
docker-compose upしたターミナルを確認すると、このように出てくると思います。

docker-composeしたターミナル.
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を使えるようにする話

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8