机架超时导致500而不是503

时间:2017-01-04 18:27:44

标签: heroku exception-handling ruby-on-rails-4.2 timeoutexception rollbar

我正在使用heroku的rack-timeout gem,以及here所述的动态错误页面。

但是,当超时引发异常时,它会被路由为500错误而不是503错误。

我可以在应用程序控制器中使用rescue_from捕获异常并手动路由到错误#503,但这会阻止Rollbar之类的插件记录异常。

有没有办法让呈现正确的错误页面,并确保像Rollbar这样的插件仍然有异常风?

2 个答案:

答案 0 :(得分:0)

我最终使用了rambulance gem,它提供了一个简单的配置选项来解决这个问题:

# config/initializers/rambulance.rb

Rambulance.setup do |config|
  config.rescue_responses = {
    "Rack::Timeout::RequestTimeoutException" => :service_unavailable
  }
end

作者还写了一些很好的理由,说明为什么不使用我之前使用的方法:

Remove custom errors page section from the guides

答案 1 :(得分:0)

我知道这是一个老问题,但是无需为此添加gem依赖项。

机架超时引发异常; 未处理该异常的500个结果。要处理该异常并获得503或其他所需的信息,请添加:

config.action_dispatch.rescue_responses["Rack::Timeout::RequestTimeoutException"] = :service_unavailable

到您的application.rb文件。