我的應用程序控制器中有一個around_filter,用於封裝超時區塊中的所有操作,以便操作在達到30秒的Heroku限制之前失敗。我也有一個rescue_from Timeout :: Error來清理救援這些超時。不幸的是,rescue_from僅適用於某些時間。Rescue_from不救援視圖或幫助程序中的Timeout :: Error
如果在控制器內部執行時發生超時,但在視圖或幫助程序中發生超時時無法挽救,它可以正常工作。
無論是中斷還是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
是否有任何其他方法來解救Timeout :: Error以使其正常工作?
太棒了,謝謝。這解決了我的問題! – Huston
Huston,我最終修補了機架超時gem來解決問題。 Caio(kch)用補丁更新了正式的機架超時。 https://github.com/kch/rack-timeout – simple10
對不起,以舊的線程。 。 。 。但我想知道如何在發生超時時使用上面的代碼正常關閉Postgres數據庫連接。我的應用程序「崩潰」,因爲機架超時發生,然後數據庫連接陷入僵局。 。 。那麼我所有的16個獨角獸進程都不能再連接到數據庫。我不確定這是否是一個全新的問題,因爲它似乎與這個問題有關。 – bcb