前の記事:RubyMineのインストール
JetBrains製のRubyMineを使って、Vagrant上に構築しているRailsアプリケーションをリモートデバッグします。

環境
- ホスト側
- OS: OS X El Capitan
- Vagrant 1.7.4
- ゲスト側
- OS: Ubuntu Server 14.04
- Ruby 2.3.1 (rbenv管理)
- Rails 4.2.6 or 5.0.0
- ウェブサーバー :Rails標準( Rails 4: Webrick , Rails 5:Puma )
- NginxとUnicornは使わない。
フォルダ構成
この記事で使用するフォルダです。
ゲスト側( Vagrant上のUbuntu )
- IP: 192.168.33.11
- ~/rails/sample : Railsプロジェクトが格納されているフォルダ。
ホスト側( OS X )
- ~/Documents/Rails/Sample : ローカル作業フォルダ。RubyMineで作成するので、現段階では未作成。
- Vagrantのsynced_folder機能 (ホスト側のフォルダにゲスト側のフォルダを同期させる機能)は、この記事では使いません。
流れ
- Rails – Rubyバージョンの確認
- Rails – Gemのインストール
- Rails – サーバーを起動
- RubyMine – プロジェクト新規作成
- RubyMine – Railsアプリケーションへの接続情報の設定
- RubyMine – Railsアプリケーションの同期
- RubyMine – Gemの更新
- RubyMine – リモートデバッグ設定
- RubyMine – 動作確認
参考:Codewall
Step0. はじめに
初めてRubyMineを使うならRailsプロジェクトはなるべく初期状態に近いほうがおすすめです。
Gemを色々と追加しているとRubyMineを使う時に原因不明のエラーが起きやすくなり、問題がどこにあるのかわかりにくくなります。
Step1. Railsで使っているRubyバージョンの確認
ゲスト側( Ubuntu )で現在のRubyバージョンを確認します。
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
RubyMineで使うので覚えておきます。
Step2. RailsへのGemのインストール
Gemfileにリモートデバッグ用のruby-debug-ideとdebaseを追加します。
group :development, :test do gem 'ruby-debug-ide' gem 'debase' end
Gemをインストールします。
$ bundle install
Step3. Rails側のサーバーを起動
rdebug-ide付きでRailsサーバーを起動します。
待ち受けるIPは、Vagrantfileで設定したIP(この記事では192.168.33.11)にします。待ち受けるポートは、RubyMineからのリモートデバッグアクセスを1234番で受けて、通常のアクセス は3000番で受けます。
$ rdebug-ide --host 192.168.33.11 --port 1234 --dispatcher-port 26162 -- bin/rails s -b 192.168.33.11 -p 3000 Fast Debugger (ruby-debug-ide 0.6.0, debase 0.2.1, file filtering is supported) listens on 192.168.33.11:1234
Fast Debuggerと表示されて、RubyMineからのアクセス待ちになります。アクセス待ちが終わるまで3000番ポートは動作しません。
Step8の動作確認までこのまま放置します。
Step4. RubyMineのプロジェクト新規作成
ホスト側( OS X )に戻ります。現在ホスト側には何のソースコードもありません。
RubyMineを起動して、空のプロジェクトを新規作成します。Create New Project を選択します。

Ruby の New Application を選択します。(Rails の New Application の場合は、Railsアプリケーションが生成されてしまうので使いません。)
- Location: プロジェクトの保存先を指定します。
- Ruby SDK: RubyバージョンをRailsで使っているバージョンに合わせて指定します。該当するRubyバージョンが表示されない場合は、ホスト側(OS X)に該当のRubyバージョンをインストールする必要があります。インストール方法は、OS X rbenv+rubyのインストールを参照ください。

RubyMineプロジェクトが起動します。

Step5. RubyMine – Railsアプリケーションへの接続情報の設定
RubyMineにVagrant上のRailsアプリケーションへの接続情報を設定します。
Toolsメニュー – Deployment – Configuration を開きます。(RubyMineメニュー – Prefereces の Build, Execution, Deployment – Deployment からも開けます)
下図の + ボタンをクリックします。

サーバーの情報を次のように設定して、OKをクリックします。
- Name: 任意の名前をつけます。
- Type: SFTPを選択します。

Connectionタブは次のようにします。
- SFTP host: Vagrantfileで割り当てたIP
192.168.33.11を指定します。 - Port: SFTP接続なので
22を指定します。 - Root path: ゲスト側(Ubuntu)のRailsアプリケーションが格納されているパスを指定します。
(Autodetectボタンを押すと、/home/vagrantと表示されます。) - User name: Vagrantへの接続ユーザ名
vagrantを指定します - Password: Vagrantへの接続パスワード
vagrantを指定します。 - Web server root URL: ブラウザでルートへアクセスするときのURL
192.168.33.11:3000を指定します。

続いて、Mappingsタブを開き、次のようにし、OKをクリックします。
- Local path: ホスト側(OS X)の当プロジェクトの場所を指定します。
- Deployment path on server ‘Vagrant’: Vagrant上のRailsプロジェクトの場所です。
/とします。ConnectionタブのRoot path:からの続きのパスです。 - Web path on server ‘Vagrant’: RailsアプケーションのURLです。
/とします。ConnectionタブのWeb server root URL:からの続きのパスです。

Step6. RubyMine – Railsアプリケーションの同期
ゲスト側(Ubuntu)にあるRailsアプリケーションをホスト側にダウンロードして、同期します。
矢印のように、プロジェクトを選択します。

Toolsメニュー – Deployment – Sync with Deployed to ... を選択し、Step5で作ったサーバー設定を選択します。すると、下図のようにゲスト側とホスト側のソースコードの差異が表示されます。現在はホスト側には何もソースコードが無いので全ファイルが表示されています。矢印位置のSynchronize Allボタンを押して、全てを同期します。

この時点で次のようなInstall missing gemsメッセージが出ているかもしれませんが、これは次のステップで解消するので置いておきます。

Step7. RubyMine – Gemの更新
Railsプロジェクトで使っているGemに合わせて、ホスト側(OS X)のGemを更新します。
ここでToolsメニューの下にBundlerが無い場合は、次のようにしてゲスト側(OS X)にBundleをインストールします。
rbenv globalでRubyのバージョンを合わせて、bundleをインストールします。RubyMineには自動でBundlerメニューが表示されます。
$ rbenv global 2.3.1 $ gem install bundle $ rbenv rehash
Toolsメニュー – Bundler – Install をクリックします。次のようなウィンドウが開くので、何もせずに Install をクリックします。

しばらくするとGemのインストールが終わります。Spring(キャッシュ系)のメッセージがでましたが置いておきます。

Step8. RubyMine – リモートデバッグ設定をする
rdebug-ideとの接続情報を設定します。
Runメニュー – Edit Configurations... を開きます。
左上の + をクリックし、Ruby remote debug を選択します。

Ruby remote debugの設定を次のようにして、OKをクリックします。
- Name: 任意の名前をつけます。
- Sever command: 変えられないのでこのままです。
- Remote host: Vagrantfileで指定したIP
192.168.33.11を指定します。 - Remote port: リモートデバッグ用の
1234を指定します。 - Remote root folder: ゲスト側(Ubuntu)のRailsアプリケーションフォルダを指定します。
- Local port:
26162のままにします。 - Local root folder: ホスト側(OS X)の当プロジェクトの場所です。

Step9. RubyMine – 動作確認
RubyMineでブレークポイントを貼ります。(ルートアクセス時のコントローラのアクションあたりが手頃)

Runメニュー – Debug 'リモートデバッグ設定ファイル名'をクリックしてデバッグを開始します。
Step3でサーバーを起動していれば、DebugウィンドウにConnectedと表示されます。

試しにブラウザからルート(http://192.168.33.11:3000)へアクセスしてみて、次のようにブレークポイントを貼った行で止まれば成功です。

デバッグを終了するときは、Runメニュー – Debug 'リモートデバッグ設定ファイル名'をクリックします。
ゲスト側のRailsサーバーも自動的に終了します。(ゲスト側のRailsサーバーを起動しっぱなしにする方法は分かりません。)
その他1
RubyMineからアクセスがあると、ゲスト側で次の警告が表示されました。(解決方法が分かりませんでした)
WARN: Unresolved specs during Gem::Specification.reset: rake (>= 0.8.1) WARN: Clearing out unresolved specs. Please report a bug if this causes problems.
その他2
RubyMineでリモートデバッグしているときに、ゲスト側に次のようなCannot render consoleメッセージが発生しました。
Cannot render console from 192.168.33.1! Allowed networks: 192.168.33.11, 127.0.0.0/127.255.255.255, ::1
Railsの config/environments/development.rb を開き次の一文を追加すると消えます。参考:Cannot render console from 10.0.2.2!と言われました – Qiita。
config.web_console.whitelisted_ips = '192.168.33.1'