Pregunta

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 rails arroja un " Ninguna ruta coincide ... " excepción, 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 he agregado ningún manejo de errores más allá del 500.html personalizado en público (aunque la respuesta no contiene ese HTML) y no tengo idea de dónde viene este bit de html.

Entonces, 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 Mestizo (5 instancias) RubyOnRails 2.1.1 (sucede tanto en 1.2 como en 2.1.1)


Olvidé mencionar, el error es causado por un " ninguna ruta coincide ... " excepción

¿Fue útil?

Solución

Este es un hilo bastante antiguo, pero por lo que vale, encontré un gran recurso que incluye una descripción detallada del problema y la solución. Aparentemente este error afecta a Rails & Lt; 2.3 cuando se usa con Mongrel.

Otros consejos

Este archivo html proviene de Rails. Está encontrando 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 Estado: encabezado y los encabezados reales está allí, y no solo un error tipográfico, esto explicaría en gran medida por qué Apache informa un mensaje 200 OK.

El encabezado de estado es cómo Rails, PHP o lo que sea que le dice a Apache " Hubo un error, por favor devuelva este código en lugar de 200 OK. " El hecho de que haya una línea en blanco significa que algo adicional está sucediendo y Ruby está generando una línea en blanco antes de la salida del error por cualquier razón. Tal vez es salida anterior de su secuencia de comandos. Sin embargo, en resumen, la línea en blanco adicional significa que Apache piensa & "; Oh, línea en blanco, sin encabezados adicionales, todo esto es contenido ahora. &"; Lo que sería coherente con el Contenido -Length header que proporcionó.

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

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

Esto viene de los rieles mismos.

http://github.com /rails/rails/tree/master/actionpack/lib/action_controller/dispatcher.rb#L60

El despachador devuelve una página de error con el código de estado 200 (Correcto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top