binding.pry
を使用しているときに、Pumaがリクエストをタイムアウトします。私のコントローラーで
def new
require 'pry'
binding.pry
end
次に、コントローラーにヒットする要求を行い、こじ開けセッションに入ります。 60秒後プーマ?リクエストをタイムアウトし、ワーカーを再起動してから、セッションのデバッグによって爆発します。
[1] pry(#<Agent::ClientsController>)> [3522] ! Terminating timed out worker: 3566
[3522] - Worker 0 (pid: 4171) booted, phase: 0
それが重要な場合、私はサスペンダーでこのアプリを生成しました。 Rails 5でデバッグセッションを拡張するにはどうすればよいですか?
これはどう?
# config/puma.rb
...
environment ENV['RACK_ENV'] || 'development'
...
if ENV['RACK_ENV'] == 'development'
worker_timeout 3600
end
編集(Rails 5.1.5):
ENV ['RACK_ENV']が空だったので、次のようにしました。
# config/puma.rb
...
if ENV.fetch('Rails_ENV') == 'development'
puts "LOGGER: development => worker_timeout 3600"
worker_timeout 3600
end
構成ファイルを作成し、そこにタイムアウト値を設定できます(デバッグに関係する要求だけでなく、すべての要求に対して)。開発者固有のものを作成し、サーバーをローカルで実行するときにそれを参照することをお勧めします(本番環境に大きなタイムアウト値を設定しないでください)。
Railsアプリケーションで、/config/dev_puma_config.rb
のようなファイルを作成し、その中に次のように配置します。
#!/usr/bin/env puma
worker_timeout 3600
次に、サーバーを起動するときに、次のように-C
でそのファイルを参照します。
bundle exec puma -t 1:1 -w 1 -p 3000 -e development -C config/dev_puma_config.rb
そのworker_timeout設定に関する背景情報として、puma構成がそれについて述べていることは次のとおりです。
指定されたタイムアウト内にすべてのワーカーがマスタープロセスにチェックインしたことを確認します。そうでない場合、ワーカープロセスが再開されます。これはリクエストのタイムアウトではなく、ハングしたプロセスやデッドプロセスから保護するためのものです。この値を設定しても、遅いリクエストからは保護されません。デフォルト値は60秒です。