【发布时间】:2012-01-26 15:37:58
【问题描述】:
我有一个在 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 的“执行过期”?我不想通过重试来拯救所有 ActionView::Template::Error,只有那些引发“执行已过期”的。
这就是我的例外所说的:
[Exception] home#index (ActionView::Template::Error) "execution expired"
或
[Exception] calculations#result (ActionView::Template::Error) "Timeout::Error: execution expired
因此,我的问题是:如何通过首先重试两次然后抛出异常/重定向到错误页面来处理这两种类型的错误?
【问题讨论】:
-
为什么会引发这个异常?您是否实现了某种长时间运行的任务,您的应用是否依赖于外部 Web 服务?
标签: ruby-on-rails timeout