stop start ruby-on-rails ruby apache http-headers

ruby on rails - start - ¿Por qué Apache+Rails está escupiendo dos encabezados de estado para el código 500?



phusion passenger (3)

Tengo una aplicación de rieles que funciona bien excepto por una cosa.

Cuando solicito algo que no existe (es decir, /not_a_controller_or_file.txt) y los rieles arrojan una excepción "No coincide coincidencias ...", la respuesta es esta (línea en blanco intencional):

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>

Tengo el complemento ExceptionLogger en / vendor, aunque ese no parece ser el problema. No agregué ningún tipo de error más allá del 500.html personalizado en público (aunque la respuesta no contiene ese HTML) y no tengo idea de dónde proviene este bit de html.

Así que Algo, en algún lugar está agregando ese código de estado HTTP / 1.1 200 demasiado temprano, o el Estado: 500 demasiado tarde. Sospecho que es Apache porque obtengo el encabezado HTTP / 1.1 500 apropiado (en la parte superior) cuando uso Webrick.

Mi pila de producción es la siguiente: Apache 2 Mongrel (5 instancias) RubyOnRails 2.1.1 (ocurre en 1.2 y 2.1.1)

Olvidé mencionar que el error es causado por una excepción "no route matches ..."


Este archivo html proviene de Rails. Se encuentra con algún tipo de error (probablemente una excepción de algún tipo, o algún otro error irrecuperable).

Si la línea en blanco adicional entre el encabezado Status: y los encabezados actuales está allí, y no es solo un error tipográfico, esto sería un gran avance para explicar por qué Apache informa un mensaje de 200 OK.

El encabezado de estado es cómo Rails, PHP, o lo que sea, le dice a Apache: "Hubo un error, devuelva este código en lugar de 200 OK". El hecho de que haya una línea en blanco significa que está sucediendo algo extra y Ruby está emitiendo una línea en blanco antes de la salida del error por la razón que sea. Tal vez es un resultado anterior de su script. Sin embargo, es corto y largo, la línea en blanco adicional significa que Apache piensa "Oh, línea en blanco, no hay encabezados adicionales, todo esto es contenido ahora", lo que sería consistente con el encabezado Content-Length que proporcionaste.

Mi suposición de por qué hay una línea en blanco sería una salida de script anterior, tal vez una línea que termina al final de una página de script completo. En cuanto a por qué está ocurriendo el error 500, no hay suficiente información aquí para decirte eso. Tal vez un archivo de error de E / S.

Editar: Dada la información adicional proporcionada por Dave sobre el funcionamiento interno, diría que esto es realmente un problema con el proxying que ocurre detrás de escena ... No podría decirte exactamente qué, más allá de lo que ya se ha dicho.