我的控制器执行以下操作:
def foo
respond_to do |format|
format.csv { "foo,bar,baz" }
end
end
但是,如果我使用浏览器访问相应的地址,则没有得到406错误,而是得到了500错误,并且在开发过程中出现了ActionController::UnknownFormat
。
我可以手动得到406错误:
format.all { head :not_acceptable }
Rails不能自动这样做吗?
答案 0 :(得分:0)
实际上,Rails可以正确发送HTTP 406,但出于以下两个原因,我们误认为它是500:
development
环境中,我们得到406个和 Rails错误页面,我们认为只有在异常无法得到解决时才会显示该页面production
环境中,该异常记录在Rollbar中,大概是在Rails重新抛出和拯救该异常以发送406之前使用telnet
或openssl s_client
确认我们在这两种情况下均得到406。
在我们的案例中,解决方案是忽略Rollbar配置中的ActionController::UnknownFormat
:
config.exception_level_filters.merge!({
'ActionController::UnknownFormat' => 'ignore'
})
答案 1 :(得分:-1)
尝试
respond_to do |format|
format.html
format.csv { send_data "foo,bar,baz" }
end