Techioz Blog

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 に設定します。