概要
IntelliJ IDEA 13 (または RubyMine) と rdebug-ide の組み合わせで
Ruby on Rails のIDEデバッグ環境を構築する。
大事なこと
- ブレークポイントを張れること
- ステップ実行できること
- コールスタックが参照できること
- 変数内容が参照できること
作業環境の前提
リモート?
VirtualBox だしリモートでもなんでもないじゃん、って思うかもしれませんが、
デバッグ情報のやり取りをネットワーク越しでやってるので、れっきとしたリモートです。
SSHトンネル掘ったりすれば、今回の構成と同じようなものをVPS上に構築することもできるはずです。(やったことないけど)
ファイルシステム前提
Windows フォルダを VirtualBox 内 CentOS にマウントしておく。
手順:Windows7 のディレクトリを VirtualBox の CentOS にマウントする - clock-up-blog
今回は、C:\sites (CentOS 上では /home/sites) をプロジェクト群の置き場とする。
例えば myproject というプロジェクトを管理する場合は、
C:\sites\myproject (CentOS 上では /home/sites/myproject) となる。
今回は「/media/sf_sites」がマウントポイントとなっています。
実はこのマウントポイントは後でとても大事な情報になります。
構築手順
Windows側:hosts設定
作業便宜上です。
C:\Windows\System32\drivers\etc\hosts を編集
# 以下を追記 (IPはVirtualBox内CentOSを参照するIP) 192.168.XX.XX virtualbox
Rails側:必要なgemをインストールする
$ cd /home/sites/myproject $ vi Gemfile # 以下を追記 gem 'ruby-debug-ide' gem 'debase' $ bundle
IntelliJ IDEA側:デバッグ設定追加
[Run] - [Edit Configurations...] メニューを押して、「Run/Debug Configuration」ダイアログを表示する。
「Run/Debug Configuration」にて、左上の「+」ボタンを押し、「Ruby remote debug」を選択する。
デバッグ用の構成が増える。以下のような感じに情報を入力し保存。
- Name: 好きにつける
- Remote host: virtualbox (さっき hosts 設定したのでこれでイケる)
- Remote port: 1234
- Remote root folder: /media/sf_sites/myproject
- Local port: 26162
- Local root folder: C:\sites\myproject
※Remote root folder のところ、けっこうキモです。
シンボリックリンクのディレクトリだと何故かうまく動かないので、
マウントポイントを直接参照するようなディレクトリを指定します。
つまり、 /home/sites/myproject ではなく /media/sf_sites/myproject を入力します。
Rails側:デバッグ用待ち受け実行
$ cd /home/sites/myproject $ bundle exec rdebug-ide --port 1234 --dispatcher-port 26162 --host 0.0.0.0 script/rails s Fast Debugger (ruby-debug-ide 0.4.22, debase 0.0.9) listens on 0.0.0.0:1234
ポート1234で待ち受け状態になりました。
IntelliJ IDEA側:デバッガに繋ぐ
さっき追加したデバッグ設定を選択した上で、虫マークのアイコンからデバッガ接続する。
「Debug」ビューの中で「Connected」という表示が確認できれば成功。
Rails側:ターミナル確認
IntelliJ IDEA が接続されたことにより、ポート3000 (Web) の待ち受けに進んでいる。
$ bundle exec rdebug-ide --port 1234 --dispatcher-port 26162 --host 0.0.0.0 script/rails s Fast Debugger (ruby-debug-ide 0.4.22, debase 0.0.9) listens on 0.0.0.0:1234 => Booting Thin => Rails 3.2.16 application starting in kobake_mysql on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server Thin web server (v1.6.1 codename Death Proof) Maximum connections set to 1024 Listening on 0.0.0.0:3000, CTRL+C to stop
ブラウザ側:サイトアクセス
http://virtualbox:3000/ にアクセス。
総括
端的に言うとシンボリックリンクの罠にすごくハマりました。
モジュールの修正完了を願います。
参考サイト
環境構築方法
ブレークしない問題について
- debugging - IntelliJ IDEA 12 not stopping at breakpoints in rails/ruby - Stack Overflow
- ruby - Remote debugger not breaking - rdebug-ide - RubyMine 6 - Stack Overflow
- Remote debugger not breaking - RM6 : RUBY-14635
- RubyMine does not stop on breakpoint... :: JetBrains Developer Community
So if I open project like this:
/Documents/RubyMine_Workspace/test_project -> debugger is not working
If I open project like this:
/Volumes/Mac1 Partition/Documents/RubyMine_Workspace/test_project -> debugger is working!!!
Using symlinks is known to cause problems with debugger:
http://youtrack.jetbrains.net/issue/RUBY-3251.