30
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RubyMine 2019.1.2でdocker compose環境でのRailsアプリのデバッグを試してみた

Last updated at Posted at 2019-05-28

#はじめに

RubyMine 2019.3 + Rails6版の記事を新たに作成しました⏩RubyMine 2019.3 でDocker Compose環境でのRails 6アプリのデバッグを試してみた

RubyMine 2019.1では、以下のJetBrainsのブログやオンラインヘルプで紹介されているように、Docker連携が機能アップデートされています。

  1. How to work with Docker/Docker Compose from RubyMine
  2. Using Docker as a Remote Interpreter
  3. リモートインタープリターとしてのDockerの使用

本記事では、上記ドキュメンテーションを参考にしながら、Docker Composeで起動するサンプルRailsアプリをデバッグするための設定および、実際にブレークポイントでプログラムが停止するまでの手順を紹介します(ほとんどオンラインヘルプと同じですが)。加えて、(私が試したところ)記載通り実行してもうまく行かなかった箇所の回避方法😅も紹介します。

ちなみにRubyMineもRailsもRubyKaigiをキッカケに触り始めたばかりですので、改善のためのコメント等大歓迎です。

#テスト環境

  • OS: macOS 10.13.6
  • RubyMine: 2019.1.2
  • Docker Desktop(for Mac): Version 2.0.0.3

#手順
##サンプルプロジェクトのダウンロード
Welcome画面から「Check out from Version Control」を選択します。
image.png

Clone Repositoryのダイアログで*1の記事にある以下のURLを指定し、Cloneボタンをクリックし、Dockerfileを含むサンプルコードをgit cloneします。
https://bitbucket.org/rubyminedoc/sample_rails_app_docker/
image.png

ダウンロードが完了すると、ローカルのrakeコマンドが勝手に実行されてErrorが出ますが、無視します。
image.png

##docker composeのためのdatabase.yml変更
*2の手順に従い、config/database.ymlを開き、development構成で使用するdatabaseをsqliteからPostgreSQLに変更します。
image.png

##[省略可]2019.1のexperimental featureの有効化
*1のブログにはexperimental featureを有効にすることが紹介されていましたが、オンラインヘルプでは記載がありません。詳細はIssueで確認中ですが、とりあえず設定しなくても動作するようです。
image.png
ruby.docker.internal.via.execにチェックを入れ、OKボタンをクリックします。
image.png

##docker-compose upの実行&リモートインタープリタ設定
docker-compose.ymlを開き、2行目のservicesの左にある「緑色の早送りみたいなアイコン」をクリックし、docker-compose upを実行します。
image.png
webコンテナをstopします。
image.png
stopしたことを確認します。
image.png

Settings/Preferences dialog (⌘,)ダイアログから、 Languages & Frameworks | Ruby SDK and Gems を選択し、+ボタンから「New remote」を選択し、Docker Compose環境のRubyインタプリタを指定します。
image.png
「Docker compose」を選択し、Servicesには「web」を指定し、OKボタンをクリックします。
image.png
成功すると、docker-composeのRemoteインタプリタが表示されるので、選択し、OKボタンをクリックします。
image.png

この画面が出ずにフリーズしてしまう場合、OSのターミナルからdocker-composeコマンドを実行すると問題を回避できることがあるようです。
プロジェクトディレクトリに移動し以下を実行:

$docker-compose stop
$docker-compose up db

##RubyMineからのdb:createとdb:migrateの実行

Docker上のRailsアプリに対するdb:createおよびdb:migrateの実行については、*2には以下のように書かれていました、私の環境ではcontrol*2(Run Anything)の場合、そのままでは、rakeコマンドとして認識されないようで、動作しませんでした。

Before debugging our Rails application, we need to create the database. To do this in RubyMine, press Ctrl twice and type db:create. Select rake db:create in the dropdown and press Enter. Leave the default settings in the invoked Execute 'db:create' dialog and click OK.

Finally, to migrate the database, press Ctrl twice, type db:migrate, select db:migrate in the dropdown and press Enter. Click OK in the invoked dialog.

代わりの方法として以下を実行しました。
まず、実行構成に「Development:sample_rails_app_docker」を指定します。
image.png

メニュー Tools | Run Rake Tasks を実行し、「Reload Rake Tasks」を選択します。
image.png

そうするとRubyMineがRake Tasksを認識できるようになるようですので、再度
メニュー Tools | Run Rake Tasks を実行し、「Rake Tasks」 または Find Action(Shift + command +A)から Rake と入力します。
image.png

「Rake Tasks」を実行した場合、メニューをたどり「db」「create」を選択します。これで「db:create」コマンドを実行したことと同等になります。
image.png

image.png

同様にメニューをたどり「db」「migrate」を選択します。これで「db:migrate」コマンドを実行したことと同等になります。
image.png
ちなみに、一旦コマンドを実行後はRun Anything(control*2)からも、db:migrateコマンドは実行できるようになりました。おそらく、Docker環境の場合、Rakeコマンドがプロジェクトのロード後は解決できないので、なんらかのトリガーがないとRakeコマンドを認識できないようです。

##サンプルRailsアプリの実行確認
実行構成を「Development:sample_rails_app_docker」にします。
image.png

緑色の▶ボタンをクリックし、サンプルRailsアプリを実行します。
image.png
http://localhost:3000 にアクセスし、以下の画面が表示されることを確認します。
image.png
確認できたら、赤色の■ボタンからRailsアプリを停止します。

##デバッグに必要なgemのインストールとデバッグ実行
Gemfileを開いて、以下の行の#を取り除き、有効化します。

# gem 'debase'
# gem 'ruby-debug-ide'

黄色の電球アイコンが表示され、クリックする(またはoption+Enter)と"Install missing gems using 'bundler' gem"が表示されるので選択し、実行します。
image.png

bundle installの実行が完了するのを待ちます。
image.png

users_controller.rbを開いてbreakpointをセットします(23行目の赤い丸)。
image.png

画面上部、緑色の虫のアイコンからデバッグを開始します。
image.png

が、以下のエラーが表示されてうまくいかないようです。Gemfile上は問題ないように見えますが、私の設定ミスか、何らかの理由でうまく動作しない(動的に適用できない?)のかもしれません。
image.png

ということで、(以前から有効な方法として)RubyMineのターミナルからdocker-compose buildを実行します。
image.png

再度、画面上部、緑色の虫のアイコンからデバッグを開始します。今度はうまく起動しました。
image.png

http://localhost:3000 にアクセスし”Sign Up Now"画面に移動して、適当にUser ID、メールアドレス、パスワードを入力します。
image.png

今度はブレークポイントで止まりました🎉
image.png

#まとめ
RubyMineのオンラインヘルプに従い、docker compose環境でRailsサンプルアプリのデバッグを試してみました。

  • control*2 からの Rake db:xxx の実行
  • Debug用Gemインストールの有効化
    ではドキュメント通りだとうまくいかないところがありましたが、別の方法で回避することが出来、無事ブレークポイントで止まることを確認できました。

デバッグのために、必要になる手順は

  • Ruby SDKの設定 Docker composeを選択し、Railsアプリが実行されるserviceで、Remote Interpreterを選択
  • RailsアプリがRubyMineから実行できることを確認
  • Debugに必要なGemのInstall
  • docker-compose build (*公式ドキュメントが正しいならば、本来は不要なはず。。。)
  • BreakPointを貼って、RailsアプリをRubyMineでデバッグ実行
    という感じでしょうか。

なお、つまずいた点については https://youtrack.jetbrains.com/issue/RUBY-24275 で確認中です。

30
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?