Puma ワーカーのタイムアウトにより Pry セッションがタイムアウトする
概要
ローカルでアプリを実行中に binding.pry にアクセスすると、通常どおり pry セッションに入りますが、約 1 分後にサーバー出力に次のような内容が表示されます。
[54438] !タイムアウトしたワーカーの終了: 54455
その後、サーバーは 1 ~ 2 秒ループで実行されているように見えます (pry セッションにつながるクエリを再実行します)。同じ binding.pry から新しい pry セッションに戻ります。ただし、入力するたびにこの新しい pry セッションでは例外となります。入力しているものが何も表示されません。この問題を解決する唯一の方法は、サーバーを終了して再起動することです。
config/puma.rb ファイルに次の行を挿入しようとしましたが、違いはないようです。
worker_timeout 900 if ENV[“RACK_ENV”] == “開発”
唯一機能するのは、.env ファイルで所有する puma ワーカーの数を 0 に設定することです。例えば
プーマ_ワーカー=0
ピューマ労働者をすべて排除する以外に、この問題を回避する方法はあるでしょうか?
解決策
Puma 設定ファイルは Puma の初期化時に読み取られますが、アプリケーションはまだロードされていません。それが Rails.env.development の理由ですか?リクエストのスコープ内にないため、RACK_ENV を使用しても機能しません。
開発のためにのみworker_timeoutを変更したい場合は、次のようなことを行う必要があります。
worker_timeout 900 unless ENV.key?('RAILS_ENV') && ENV['RAILS_ENV'] != 'development'
つまり、RAILS_ENV が設定されていない場合、または開発に設定されている場合は、タイムアウトを 900 に設定します。