Domanda

Ho un'app di rotaie che funziona bene tranne una cosa.

Quando richiedo qualcosa che non esiste (ad es. /not_a_controller_or_file.txt) e le rotaie generano un " Nessuna route corrisponde ... " eccezione, la risposta è questa (riga vuota intenzionale):

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>

Ho il plugin ExceptionLogger in / vendor, anche se questo non sembra essere il problema. Non ho aggiunto alcun errore di gestione oltre il 500.html personalizzato in pubblico (anche se la risposta non contiene quell'HTML) e non ho idea da dove provenga questo bit di HTML.

Quindi qualcosa, da qualche parte sta aggiungendo quel codice di stato HTTP / 1.1 200 troppo presto o lo stato: 500 troppo tardi. Ho il sospetto che sia Apache perché ottengo l'intestazione HTTP / 1.1 500 appropriata (in alto) quando uso Webrick.

Il mio stack di produzione è il seguente: Apache 2 Mongrel (5 istanze) RubyOnRails 2.1.1 (succede sia in 1.2 che in 2.1.1)


Ho dimenticato di menzionare, l'errore è causato da un " nessuna rotta corrisponde ... " eccezioni

È stato utile?

Soluzione

Questo è un thread abbastanza vecchio, ma per quello che vale ho trovato una grande risorsa che include una descrizione dettagliata del problema e della soluzione. Apparentemente questo errore riguarda Rails & Lt; 2.3 se utilizzato con Mongrel.

Altri suggerimenti

Questo file html proviene da Rails. Sta riscontrando una sorta di errore (probabilmente un'eccezione di qualche tipo o qualche altro errore irrecuperabile).

Se è presente la riga vuota aggiuntiva tra lo stato: intestazione e le intestazioni effettive, e non solo un errore di battitura, questo spiegherebbe molto perché Apache sta segnalando un messaggio 200 OK.

L'intestazione di stato è il modo in cui Rails, PHP o qualunque altra cosa dice ad Apache &; Si è verificato un errore, si prega di restituire questo codice invece di 200 OK. " Il fatto che ci sia una riga vuota significa che sta succedendo qualcosa in più e Ruby sta emettendo una riga vuota prima dell'output dell'errore per qualsiasi motivo. Forse è l'output precedente della tua sceneggiatura. Il più lungo e breve è, tuttavia, la riga vuota in più significa che Apache pensa & Quot; Oh, riga vuota, senza intestazioni extra, questo è tutto il contenuto ora. & Quot ;, che sarebbe coerente con il Contenuto -Lunghezza dell'intestazione che hai fornito.

La mia ipotesi sul perché ci sia una riga vuota sarebbe l'output dello script precedente, forse una riga che termina alla fine di una pagina di script completa. Sul motivo per cui si sta verificando l'errore 500, qui non ci sono abbastanza informazioni per dirtelo. Forse un errore I / O del file.

Modifica: date le informazioni extra fornite da Dave sugli interni, direi che questo è in realtà un problema con il proxy che si svolge dietro le quinte ... Non potrei dirtelo esattamente cosa però, oltre a ciò che è già stato detto.

Questo proviene dalle rotaie stesse.

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

Il dispatcher restituisce una pagina di errore con il codice di stato 200 (Operazione riuscita).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top