前の記事: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'