Mam aplikacji uruchomionych na Heroku, że od czasu do czasu, donosi Timeout :: Error i (actionView :: Template :: Error) "wykonanie wygasł".Uchwyt TimeOut :: Błąd ponownego
Zdarza się to na całej stronie internetowej (tj. Nie w określonym kontrolerze), dlatego chciałbym utworzyć funkcję, która obsłuży te dwa błędy, najpierw poprzez dwukrotne ponowienie próby i przekierowanie użytkownika na stronę, która powie im że serwer jest zajęty.
Mój obecny plan jest użycie następujących ApplicationController:
rescue_from Timeout::Error, :with => :rescue_from_timeout
def rescue_from_timeout
sleep 2
retry
end
ale to tylko pętli i pętla. Chcę, żeby się złamała po dwóch próbach. Jak mogę to zrobić?
Ponadto, Jak mogę obsługiwać ActionView :: Template :: Błąd "wykonania wygasł"? Nie chcę ratować całego ActionView :: Template :: Błąd z ponownymi próbami, tylko te, które powodują "wykonanie wygasło".
To właśnie mój wyjątek mówi:
[Exception] home#index (ActionView::Template::Error) "execution expired"
lub
[Exception] calculations#result (ActionView::Template::Error) "Timeout::Error: execution expired
Moje pytanie zatem: Jak mogę obsługiwać te dwa rodzaje błędów przez pierwszy ponownego dwukrotnie, a następnie rzucać wyjątek/przekierować do strony błędu?
Dlaczego ten wyjątek został podniesiony? Czy wdrożyłeś jakieś długotrwałe zadania, czy twoja aplikacja zależy od zewnętrznej usługi internetowej? – Jef