У меня есть приложение, работающее на Heroku, которое иногда сообщает Timeout :: Error и (ActionView :: Template :: Error) "истек срок выполнения" .
Это происходит по всему сайту (т.е. не в конкретном контроллере), поэтому я хотел бы создать функцию, которая будет обрабатывать эти две ошибки, сначала повторив попытку дважды и перенаправив пользователя на страницу, которая сообщит им, что сервер занят.
Мой текущий план заключается в использовании следующего в ApplicationController:
rescue_from Timeout::Error, :with => :rescue_from_timeout
def rescue_from_timeout
sleep 2
retry
end
но это будет просто цикл и цикл. Я хочу, чтобы это сломалось после двух попыток. Как я могу это сделать?
Кроме того, как я могу обработать ActionView :: Template :: Error для "expired expired"? Я не хочу спасать все ActionView :: Template :: Error с повторными попытками, только те, которые провоцируют «истек срок выполнения».
Вот что говорит мое исключение:
[Exception] home#index (ActionView::Template::Error) "execution expired"
или
[Exception] calculations#result (ActionView::Template::Error) "Timeout::Error: execution expired
Мой вопрос, таким образом: как я могу обработать эти два типа ошибок, сначала повторив попытку дважды, а затем выдав исключение / перенаправление на страницу ошибки?