我正在使用 heroku 的rack-timeout
gem,以及这里描述的动态错误页面。
但是,当超时引发异常时,它会被路由为 500 错误而不是 503。
我可以在我的应用程序控制器中捕获异常rescue_from
并手动路由到错误#503,但这会阻止像 Rollbar 这样的插件记录异常。
有没有办法获得正确的错误页面,并确保像 Rollbar 这样的插件仍然会收到异常消息?
我正在使用 heroku 的rack-timeout
gem,以及这里描述的动态错误页面。
但是,当超时引发异常时,它会被路由为 500 错误而不是 503。
我可以在我的应用程序控制器中捕获异常rescue_from
并手动路由到错误#503,但这会阻止像 Rollbar 这样的插件记录异常。
有没有办法获得正确的错误页面,并确保像 Rollbar 这样的插件仍然会收到异常消息?
我最终使用了rambulance
gem,它提供了一个简单的配置选项来解决这个问题:
# config/initializers/rambulance.rb
Rambulance.setup do |config|
config.rescue_responses = {
"Rack::Timeout::RequestTimeoutException" => :service_unavailable
}
end
作者还写了一些为什么不使用我以前使用的方法的充分理由:
我知道这是一个老问题,但没有必要为此添加 gem 依赖项。
rack-timeout 引发异常;未处理该异常的 500 结果。要处理该异常并获得 503 或您可能想要的任何其他内容,请添加:
config.action_dispatch.rescue_responses["Rack::Timeout::RequestTimeoutException"] = :service_unavailable
到您的 application.rb 文件。