ruby-on-rails - 为什么 Rails 没有响应错误 406?
问题描述
我的控制器具有以下操作:
def foo
respond_to do |format|
format.csv { "foo,bar,baz" }
end
end
但是如果我用浏览器访问相应的地址,而不是得到一个 406 错误,我得到一个 500 错误,并且在开发中,ActionController::UnknownFormat
.
我可以手动得到 406 错误:
format.all { head :not_acceptable }
Rails 不应该自动执行此操作吗?
解决方案
所以实际上,Rails 正确地发送了 HTTP 406,但我们将其误认为是 500,原因有两个:
- 在
development
环境中,我们得到一个 406和Rails 错误页面,我们认为只有在异常未获救时才会显示 - 在
production
环境中,异常被记录在 Rollbar 中,大概是在被 Rails 重新抛出并救出发送 406 之前
不过,使用telnet
或openssl s_client
确认我们在这两种情况下都会得到 406。
在我们的案例中,解决方案是ActionController::UnknownFormat
在 Rollbar 配置中忽略:
config.exception_level_filters.merge!({
'ActionController::UnknownFormat' => 'ignore'
})
推荐阅读
- javascript - Fullcalendar dateIncrement on click(Prev/Next) 一一移动
- linux - 这是我的任务,但我不知道我做错了什么
- reactjs - protecting routes with nextjs and express
- java - PagerAdapter instantiate item gets called for items on each scroll
- javascript - Check ViewContext.RouteData.Values to see if parameter exists
- reactjs - 静态值作为钩子输入
- python - How to read a data from a json and compare with the CSV and return the value using Python
- javascript - Problems pushing in javascript (Cannot read property 'push' of null)
- tomcat - Tomcat 日志模式 %b 与 %B
- reactjs - Can't add data to firebase firestore Error: React Native: Possible unhandled promise rejection (id: 0) TypeError: Network request failed