Rails をInnteliJ IDEAでデバッグする
はじめに
Railsアプリケーションを開発にIntelliJ IDEAを利用し、デバッグ実行を行えるようにする。
色々試してみたが… 結論 remote-debug
IntelliJ IDEAにruby sdkを認識させ、gemsetを設定してみるが、うまくデバッグできることもあったが、再現性に乏しい。rbenv + gemsetでデバッグは正式にサポートされていないのか??
結局、リモートデバッグを利用することにした。リモートデバッグといっても、IDEAの設定をリモートデバッグにして、ローカルのターミナルでrailsを起動するので、新しい環境(サーバ)などは不要。
ruby/rails環境
rubyはrbenvを利用し、gemはrbenv gemsetを利用して管理する。
$ rbenv versions system * 2.4.1 (set by /Users/xxxxx/Develop/Repos/gemset_name/src/.ruby-version) $ rbenv gemset active gemset_name global
デバッグツール(gem)のインストール
$ rbenv gemset active gemset_name $ gem install ruby-debug-ide $ gem install debase
IDEA側設定
Project Settings > Project
一応SDKを設定する。
Project SDKにrbenv2.4.1 を選択する。
Run/Debug Configurations
+ボタンからruby remote debugを選択し、以下のように設定を行う。
項目 | 設定 |
---|---|
Server Command | rdebug-ide –host 0.0.0.0 –port 1234 –dispatcher-port 26162 – $COMMAND$ |
Remote host | localhost |
Remote port | 1234 |
Remote root folder | railsアプリケーションのルートフォルダ |
Local port | 26162 |
Local root folder | railsアプリケーションのルートフォルダ |
※ 今回はRemote と Localが同じマシンなので、root folderはいずれも同じになる。
デバッグの実行
リモートでrailsを起動
rdebug-ideでホスト、ポートなどを指定して、railsを起動する。
$ rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- ./bin/rails server Fast Debugger (ruby-debug-ide 0.6.0, debase 0.2.1, file filtering is supported) listens on 0.0.0.0:1234
debug実行
リモートでrailsを起動した状態で、IDEAのデバッグを実行する。
デバッグを開始し接続ができると、リモート側のコンソールに以下のようにコンソール出力がされる。
=> Booting Puma => Rails 5.1.1 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.9.1 (ruby 2.4.1-p111), codename: Private Caller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000 Use Ctrl-C to stop
ブレークポイントの設定
あとは通常通りブレークポイントを設定し、ブラウザなどでrailsのページを開くと、ブレークポイントでデバッガが停止する。