我有一个运行良好的 Rails 应用程序,除了一件事。
当我请求不存在的内容(即 /not_a_controller_or_file.txt)并且 rails 抛出“No Route matches...”异常时,响应是这样的(有意空白行):
HTTP/1.1 200 OK
Date: Thu, 02 Oct 2008 10:28:02 GMT
Content-Type: text/html
Content-Length: 122
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Status: 500 Internal Server Error
Content-Type: text/html
<html><body><h1>500 Internal Server Error</h1></body></html>
我在 /vendor 中有 ExceptionLogger 插件,尽管这似乎不是问题。除了自定义的 500.html 之外,我还没有在公共场合添加任何错误处理(尽管响应不包含该 HTML),而且我不知道这部分 html 是从哪里来的。
所以,某处添加HTTP/1.1 200状态代码太早了,或者Status: 500太晚了。我怀疑它是 Apache,因为当我使用 Webrick 时,我得到了适当的 HTTP/1.1 500 标头(在顶部)。
我的生产堆栈如下:Apache 2 Mongrel(5 个实例)RubyOnRails 2.1.1(发生在 1.2 和 2.1.1 中)
我忘了提,错误是由“没有路由匹配...”异常引起的