私のアプリケーションコントローラには、タイムアウトブロック内のすべてのアクションを囲むためにaround_filterがありますので、30秒間のHeroku制限に達する前にアクションが失敗します。私もrescue_from Timeout :: Errorを持っているので、これらのタイムアウトをきれいに救済することができます。残念ながら、rescue_fromは時間の一部しか動作しません。Rescue_fromはレスキューしません。
コントローラ内で実行中にタイムアウトが発生しても、正常に動作しますが、タイムアウトがビューまたはヘルパー内で発生した場合はレスキューできません。
どちらもInterruptもSignalExceptionもありません。両方ともTimeout :: Errorが継承し、どちらも正しくレスキューします。ただし、例外自体を救済する場合は、はビューとヘルパー内で正しくレスキューします。
around_filter :timeout
rescue_from Timeout::Error, :with => :timeout_rescue
def timeout
Timeout::timeout(10){
yield
}
end
def timeout_rescue
# Rescued
end
タイムアウト::エラーを救済する他の方法はありますか?
ありがとう、ありがとう。それは私の問題を解決する! – Huston
ヒューストン、私は問題を解決するためにラックタイムアウトの宝石をパッチしてしまいました。 Caio(kch)は公式のラックタイムアウトを更新しました。 https://github.com/kch/rack-timeout – simple10
古いスレッドにつけて申し訳ありません。 。 。 。しかし、タイムアウトが発生したときにPostgresデータベース接続を正常に閉じるために、上記のコードをどのように使用するのかと思います。ラックのタイムアウトが発生し、データベース接続がリムボーで止まってしまったため、私のアプリは「クラッシュ」しています。 。 。私のユニコーンプロセスは16個すべてデータベースに接続できなくなります。私はこのことがまったく新しい問題を正当化するかどうかはわかりませんでした。 – bcb