Question

J'ai une application rails qui fonctionne bien, sauf pour une chose.

Lorsque je demande quelque chose qui n'existe pas (c'est-à-dire / not_a_controller_or_file.txt) et rails lève un & "Aucune route ne correspond à ... &"; exception, la réponse est la suivante (ligne blanche intentionnelle):

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>

J'ai le plugin ExceptionLogger dans / vendor, bien que cela ne semble pas être le problème. Je n'ai pas ajouté de traitement d'erreur au-delà du fichier personnalisé 500.html en public (bien que la réponse ne contienne pas ce code HTML) et je ne sais pas du tout d'où provient ce morceau de HTML.

Quelque chose ajoute quelque part quelque part le code de statut HTTP / 1.1 200 trop tôt ou le Statut: 500 trop tard. Je suppose que c'est Apache parce que j'ai l'en-tête HTTP / 1.1 500 approprié (en haut) lorsque j'utilise Webrick.

Ma pile de production est la suivante: Apache 2 Bâtard (5 instances) RubyOnRails 2.1.1 (se produit dans les versions 1.2 et 2.1.1)

J'ai oublié de mentionner, l'erreur est provoquée par un & "aucune route ne correspond à ... &"; exception

Était-ce utile?

La solution

Ceci est un fil de discussion assez ancien, mais j'ai trouvé une excellente ressource qui comprend une description détaillée du problème et de sa solution. Apparemment, ce bug affecte Rails & Lt; 2.3 lorsqu'il est utilisé avec Mongrel.

Autres conseils

Ce fichier HTML provient de Rails. Il rencontre une sorte d'erreur (probablement une exception ou une autre erreur irrécupérable).

Si la ligne blanche entre l'en-tête Status: et les en-têtes réels est présente, et pas seulement une faute de frappe, cela contribuerait grandement à expliquer pourquoi Apache a signalé un message 200 OK.

L’en-tête Status indique comment Rails, PHP ou tout ce qui indique à Apache & "; Une erreur s’est produite. Veuillez renvoyer ce code au lieu de 200 OK. &"; Le fait qu'il y ait une ligne vide signifie qu'il se passe quelque chose de plus et que Ruby affiche une ligne vierge avant l'erreur, quelle qu'en soit la raison. Peut-être que c'est la sortie précédente de votre script. En résumé, la ligne blanche supplémentaire signifie qu'Apache pense & "Oh, ligne blanche, pas d'en-têtes supplémentaires, tout est contenu maintenant. &" ;, ce qui serait cohérent avec le contenu. -En-tête de longueur que vous avez fourni.

Je suppose que la raison pour laquelle il existe une ligne vierge correspondrait à la sortie du script précédent, peut-être à la fin d'une page de script complète. Pour ce qui est de la cause de l’erreur 500, il n’ya pas assez d’informations ici pour vous le dire. Peut-être une erreur d’entrée / sortie de fichier.

Modifier: Etant donné les informations supplémentaires fournies par Dave sur les composants internes, je dirais que c'est en réalité un problème lié à la procuration en coulisse ... Je ne saurais vous dire. exactement quoi cependant, au-delà de ce qui a déjà été dit.

Cela vient des rails eux-mêmes.

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

Le répartiteur renvoie une page d'erreur avec le code d'état 200 (succès).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top