My Note Pad

エンジニアリングや日々の雑感を書いていきます

Vagrant上のRailsアプリをRubyMineで開発・デバッグする

やりたいこと

  • Ruby on Railsの学習(開発)環境を作りたい
  • 普段はIntellijを利用しているので、RubyMine(Intellij)を使いたい
  • Macの環境はあまり汚さず、Vagrant上に環境を作りたい

上記の事を実現するために、色々調べて実際に環境を構築してみました。
躓いた部分がいくつかあったので、自分用にメモ
こちらの記事をかなり参考にさせていただきました。

keruuweb.com

必要なもの

  • RubyMine(有償)
  • Vagrant
  • Virtual Box

それぞれのインストール方法は省略。(rbenvとかも)
Macであればbrew caskとかで入れればOK
Windowsの場合はよくわからないので公式ドキュメントを参考に・・・

1.まずはVagrantのBoxを用意

今回は、rails-dev-boxを利用しました。

github.com

VagrantのBox作成@host

mkdir ~/Vagrant
cd ~/Vagrant
git clone https://github.com/rails/rails-dev-box.git
cd rails-dev-box
vim Vagrantfile

Vagrantfileにprivate_networkの設定を追加

  # private_networkの設定
  config.vm.network "private_network", ip: "192.168.33.11" 

Vagrantのプロビジョニングと起動@host

vagrant up

2.Vagrant上で新たにRailsアプリを作成

VagrantSSH接続@host

vagrant ssh

新規railsアプリ作成@vagrant

vagrant@rails-dev-box:~$ ruby -v
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-linux-gnu]
vagrant@mkdir workspace
vagrant@cd workspace/
vagrant@sudo gem install rails
vagrant@rails _5.0.0.1_ new sample_app

Gemfileにリモートデバッグ用のGemを追加@vagrant

vagrant@cd sample_app/
vagrant@sudo vim Gemfile

Gemfile@vagrant

#以下の設定を追加
group :development, :test do
 gem 'ruby-debug-ide'
 gem 'debase'
end

Bundleをインストール@vagrant

vagrant@bundle install
#失敗したのでエラーメッセージ通りに以下のgemをインストール
vagrant@sudo gem install ruby-debug-ide -v '0.6.0'
vagrant@bundle install

3.VagrantRailsサーバーを起動

rdebug-ideRailsサーバーを起動する
指定するIPアドレスVagrantfileに指定したprivate_networkIPアドレスを指定する。
今回の場合、192.168.33.11

railsサーバー起動@vagrant

vagrant@rails-dev-box:~/workspace/sample_app$ rdebug-ide --host 192.168.33.11 --port 1234 --dispatcher-port 26162 -- bin/rails s -b 192.168.33.11 -p 3000

4.RubyMineで新規プロジェクト作成

f:id:yuki10k:20160905163902p:plain

まずはCreate New Projectを選択

f:id:yuki10k:20160905163920p:plain

ここではRailsのNew Applicationではなく、RubyのNew Applicationを選択
Location:プロジェクトのディレクトリ・プロジェクト名
Ruby SDK: RubySDK
を入力し、Create

f:id:yuki10k:20160905165202p:plain

↑のように新規にプロジェクトが作成される。

続いてVagrantへの接続情報を定義する。

Prefereces -> Build, Execution, Deployment -> Deploymentを選択

f:id:yuki10k:20160905165314p:plain

+ボタンでAdd Serverメニューを開く。
Name:好きな名前
Type:SFTP
を選択してOK

f:id:yuki10k:20160905165655p:plain

Connectionタブで以下の情報を入力
SFTP host: 192.168.33.11 (Vagrantfileに定義したIPアドレス)
Port: 22
User name: vagrant
Password: vagrant

Test SFTP connection...して接続できることを確認しておく。

f:id:yuki10k:20160905165754p:plain

続いてMappingsタブで以下の情報を入力
Local path: Macのプロジェクトのrootパス
Deployment path on server "Vagrant": vagrant上のRailsアプリのパス

f:id:yuki10k:20160905170057p:plain

入力が終わったらOK

続いて、ローカルとvagrant上のプロジェクトを同期する
Tools -> Deployment -> Sync with Deployed to Vagrant...と選択する。

f:id:yuki10k:20160905170308p:plain

↑のように差分が表示されるので、Synchronize Allで同期する。
(▶▶みたいなボタン)

f:id:yuki10k:20160905170634p:plain

同期完了

続いてbundle install
Tools -> Bundler -> Installを選択

f:id:yuki10k:20160905170717p:plain

※自分はsudoじゃないとパーミッションエラーとなってしまったので、Run with sudoにチェックを付けて実行

f:id:yuki10k:20160905170847p:plain

bundle install 完了

続いてリモートデバッグ設定
Run -> Edit Configrationを選択

f:id:yuki10k:20160905170928p:plain

+ボタンを選択し、更にRuby remote debugを選択
以下のようにリモートデバッグ情報を入力していく。

f:id:yuki10k:20160905171054p:plain

Remote host: 192.168.33.11 (Vagrantfileに設定したIPアドレス)
Remote port: 1234 (デフォルト値)
Remote root folder: vagrantのアプリケーションルート
Local port: 26162 (デフォルト値)
Local root folder: ローカルのアプリケーションルート

入力したらOK

適当にブレークポイントを置く

f:id:yuki10k:20160905171206p:plain

↑で設定したリモートデバッグ設定を選択して、虫のアイコンを選択
コンソールがConnectedになっていればリモートと接続OK

f:id:yuki10k:20160905171218p:plain

あとはhttp://192.168.33.11:3000/ブレークポイントを設定した箇所にアクセスするとブレークポイントで停止してデバッグができる。

f:id:yuki10k:20160905171229p:plain

余談

rubySDKについて

Preferences -> Languages & Frameworks -> Ruby SDK and GemsからRubyのバージョンを指定できる。
rbenvなどでVagrantとバージョンを合わせておくか、Vagrantの設定を読み込む。
Vagrantの設定を読み込むには、+ボタン -> New RemoteでVagrantfileを選択すれば自動的に探して設定してくれる。

f:id:yuki10k:20160905172159p:plain

今回は以上。