Railsでデバッグをしたい場合はbyebugというツールを使う方法があります。(Visual Studio Codeを使っている場合はステップ実行ができるのでそちらを使った方が良いでしょう。)
Gemfileにはデフォルトで「byebug」が開発環境だけ読み込まれる設定になっています。
1 2 3 4 |
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end |
byebugの使い方
ブレークポイントを貼りプログラムを止めて変数の中身を確認する。
コントローラやモデルとかでプログラムを止めたい任意の箇所で下記の記述をします。
1 |
byebug |
実行するとbyebugを記述した箇所で処理が止まるので下記のようにコンソール上で変数を打つと変数の中身を確認することが可能です。(下記例では画面から送られてきたparamsという変数の中身を確認しています。)
byebugのコマンド
コマンド | 処理内容 |
---|---|
n | ステップオーバー |
s | ステップイン |
c | 実行継続 |
byebugを終了する。
下記コマンドを実行するとbyebugは終了します。
1 |
quit |
その際はRailsサーバも終了するので注意が必要です。
Docker上のRailsデバック
docker-compose.yml
「tty: true」と「stdin_open: true」の設定を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 |
services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - 3000:3000 depends_on: - db tty: true ★ stdin_open: true ★ |
次に下記コマンドを実行してWebサーバーのコンテナ名(name)を取得します。
1 |
docker ps |
Railsのコードに「byebug」を埋め込んだら下記コマンドを実行します。
1 |
docker attach Webサーバーのコンテナ名(docker psで取得) |
これでデバックすることが可能になります。なおattach状態を解除したい場合は下記のキーを押します。
1 |
Ctrlキー + p + q |
いちいち調べてattachするのは面倒だと思うので、毎回docker psにてコンテナ名を調べるのは面倒だと思うので、下記の起動方法をすれば楽にアタッチすることが可能です。(内部的な動きとしては、アタッチしてコンテナを起動します。)
1 |
./bin/docker-compose-attach web(Webサーバーのコンテナ名) |
この記事へのコメントはありません。