机架超时结果为 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
作者还写了一些不使用我以前使用的方法的充分理由:
我知道这是一个老问题,但没有必要为此添加 gem 依赖项。
rack-timeout 引发异常; 500 是由于该异常未处理。要处理该异常并获得 503 或您可能想要的任何其他内容,请添加:
config.action_dispatch.rescue_responses["Rack::Timeout::RequestTimeoutException"] = :service_unavailable
到您的 application.rb 文件。
我正在使用 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
作者还写了一些不使用我以前使用的方法的充分理由:
我知道这是一个老问题,但没有必要为此添加 gem 依赖项。
rack-timeout 引发异常; 500 是由于该异常未处理。要处理该异常并获得 503 或您可能想要的任何其他内容,请添加:
config.action_dispatch.rescue_responses["Rack::Timeout::RequestTimeoutException"] = :service_unavailable
到您的 application.rb 文件。