机架超时结果为 500 而不是 503

Rack-timeout results in 500 instead of 503

我正在使用 heroku 的 rack-timeout gem, along with dynamic error pages as described here

但是,当超时引发异常时,它会被路由为 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

作者还写了一些不使用我以前使用的方法的充分理由:

Remove custom errors page section from the guides

我知道这是一个老问题,但没有必要为此添加 gem 依赖项。

rack-timeout 引发异常; 500 是由于该异常未处理。要处理该异常并获得 503 或您可能想要的任何其他内容,请添加:

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

到您的 application.rb 文件。