Rails + Puma は cluster mode だと RubyMine でデバッグできない #Rails #RubyMine

Rails + Docker な開発環境で RubyMine のリモートデバッグを行う場合、下記を参考にすればできるようになる。

www.jetbrains.com

ところが、 Puma を利用していた際にデバッグモードでエラーが発生し起動できなくなってしまった。

Exception: Connection refused - connect(2) for "172.19.0.1" port 26168
Fatal exception in DebugThread loop: Attempt to unlock a mutex which is not locked

原因

どうやら RubyMine が使用している ruby-debug-ide が、 cluster mode だとうまくできないようである。

github.com

対応

single mode で起動するようにすれば、デバッグできるようになる。

puma の worker を 0 にすれば single mode になる。

環境変数 WEB_CONCURRENCY0 に設定すれば、 worker を 0 にできる。

environment:
  - WEB_CONCURRENCY=${WEB_CONCURRENCY:-0}

docker-compose 経由なら↑な感じ。

=> Booting Puma
=> Rails 7.0.5 application starting in development 
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...

起動ログに single mode と表示されれば OK。

設定ファイルの修正は不要

config/puma.rb あたりでも設定できるが、デフォルトの設定が環境変数を優先するようになっているので、環境変数だけ設定すれば大丈夫。

(設定ファイルの方はデフォルトだとコメントアウトされているが問題ない)

github.com

参考