Rails + Docker な開発環境で RubyMine のリモートデバッグを行う場合、下記を参考にすればできるようになる。
ところが、 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 だとうまくできないようである。
対応
single mode で起動するようにすれば、デバッグできるようになる。
puma の worker を 0 にすれば single mode になる。
環境変数 WEB_CONCURRENCY
を 0
に設定すれば、 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
あたりでも設定できるが、デフォルトの設定が環境変数を優先するようになっているので、環境変数だけ設定すれば大丈夫。
(設定ファイルの方はデフォルトだとコメントアウトされているが問題ない)