web-dev-qa-db-ja.com

Puma Rails 5binding.pryはタイムアウト前の60秒間のみ使用可能

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でデバッグセッションを拡張するにはどうすればよいですか?

16
thedanotto

これはどう?

# 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
22
Pascal

構成ファイルを作成し、そこにタイムアウト値を設定できます(デバッグに関係する要求だけでなく、すべての要求に対して)。開発者固有のものを作成し、サーバーをローカルで実行するときにそれを参照することをお勧めします(本番環境に大きなタイムアウト値を設定しないでください)。

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秒です。

6
user605331