Projet

Général

Profil

Bug #1295

Erreur : Premature end of script headers

Ajouté par Thomas Noël il y a environ 12 ans. Mis à jour il y a environ 12 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
06 mars 2012
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Planning:

Description

Dans les logs d'apache, on arrive parfois sur une 500 suite à un POST (dans le backoffice) :

error.log :

[Mon Mar 05 09:19:19 2012] [error] [client 81.93.6.149] Premature end of script headers: , referer: https://meyzieu.au-quotidien.com/backoffice/remarque-suggestions-a-propos-de-ce-site/3/
[Mon Mar 05 09:19:19 2012] [error] [client 81.93.6.149] (500)Unknown error 500: scgi: error reading response headers, referer: https://meyzieu.au-quotidien.com/backoffice/remarque-suggestions-a-propos-de-ce-site/3/

access.log :

81.93.6.149 - - [05/Mar/2012:09:19:19 +0100] "POST /backoffice/remarque-suggestions-a-propos-de-ce-site/3/ HTTP/1.1" 500 1188 "https://meyzieu.au-quotidien.com/backoffice/remarque-suggestions-a-propos-de-ce-site/3/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2" (163344us)

Résultat : l'utilisateur arrive sur une page "site en maintenance" (erreur 500 customisée sur l'apache de auquo).

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 12 ans

Il y a des exceptions qui passent entre les mailles du filet, dans quixote/server/scgi_server.py il y a ce code pour la sérialisation d'une réponse dans la connexion SCGI:

        response = self.publisher.process(input, env)
        try:
            response.write(output)
            input.close()
            output.close()
            conn.close()
        except IOError, err:
            self.publisher.log("IOError while sending response " 
                               "ignored: %s" % err)

Si response.write(output) génère une exception (par exemple en essayant de renvoyer un header qui a une valeur unicode, on ne la verra pas. Le patch suivant rajoute encore un niveau pour rattraper les exceptions pour surveiller un peu ça.

--- a/wcs/qommon/scgi_server.py
+++ b/wcs/qommon/scgi_server.py
@@ -28,7 +28,7 @@ import quixote.server.scgi_server
 import sessions
 import cron
 import quixote.server.simple_server as simple_server
-
+import traceback

 class QommonHandler(quixote.server.scgi_server.QuixoteHandler):
     connection_limit = -1
@@ -36,7 +36,22 @@ class QommonHandler(quixote.server.scgi_server.QuixoteHandler):

     def handle_connection(self, conn):
         self.number_of_connection_handled = self.number_of_connection_handled + 1
-        quixote.server.scgi_server.QuixoteHandler.handle_connection(self, conn)
+        try:
+            quixote.server.scgi_server.QuixoteHandler.handle_connection(self, conn)
+        except Exception:
+            (exc_type, exc_value, tb) = sys.exc_info()
+            error_summary = traceback.format_exception_only(exc_type, exc_value)
+            error_summary = error_summary[0][0:-1] # de-listify and strip newline
+            plain_error_msg = self.publisher._generate_plaintext_error(None,
+                    None, exc_type, exc_value, tb)
+            try:
+                self.publisher.logger.log_internal_error(error_summary, plain_error_msg)
+            except socket.error:
+                # will happen if there is no mail server available and exceptions
+                # were configured to be mailed.
+                pass
+            raise
+
         # input, output and conn are closed, long running jobs could be done
         # here.
         self.publisher.response.process_after_jobs()
#2

Mis à jour par Frédéric Péters il y a environ 12 ans

  • Projet changé de Au quotidien à w.c.s.
#3

Mis à jour par Thomas Noël il y a environ 12 ans

J'ai mis le patch sur la prod (auquo), sans le commiter pour l'instant. On va voir ce que ça donne.

#4

Mis à jour par Thomas Noël il y a environ 12 ans

  • Statut changé de Nouveau à En cours
#5

Mis à jour par Thomas Noël il y a environ 12 ans

  • Statut changé de En cours à Rejeté

A priori le max_children a corrigé le problème des erreurs 500... on ne va pas commiter ce patch (pour l'instant)...

#6

Mis à jour par Benjamin Dauvergne il y a environ 12 ans

Je pense que ne pas perdre des exception c'est assez important quand même, en général ça fait gagner du temps :) Maintenant on peut s'accorder qu'il serait bien de factoriser le code qui transforme les exceptions en mail plutôt que de le recopier.

Formats disponibles : Atom PDF