2013-03-21 10 views
13

Ich arbeite an Django Projekt und ich habe diese Fehler E-Mail.django UnreadablePostError: Anfrage Daten lesen Fehler

Stapelüberwachung

File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/core/handlers/wsgi.py", line 180, in _get_post 
    self._load_post_and_files() 

File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/http/__init__.py", line 379, in _load_post_and_files 
    self._post, self._files = QueryDict(self.body, encoding=self._encoding), MultiValueDict() 

File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/http/__init__.py", line 335, in body 
    self._body = self.read() 

File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/http/__init__.py", line 391, in read 
    return self._stream.read(*args, **kwargs) 

File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/core/handlers/wsgi.py", line 98, in read 
    result = self.buffer + self._read_limited() 

File "/usr/local/lib/python2.7/dist-packages/Django-1.4.3-py2.7.egg/django/core/handlers/wsgi.py", line 92, in _read_limited 
    result = self.stream.read(size) 

UnreadablePostError: request data read error 

Warum dieser Fehler passiert?
Wie lösen?

+10

Dies sind gebrochene Anfragen. Z.B. jemand hat die Anfrage abgebrochen, während er etwas gepostet hat. Sie können sie ignorieren. Aber Sie könnten überprüfen, auf welcher Seite das passiert. Vielleicht benötigt deine App zu viel Zeit, um etwas zu laden. –

+4

@Bibhas Ich habe einmal mit den schrecklichsten QAs gearbeitet, deren Idee vom "Stresstest" war, "F5" in einem Browser zu halten. Viele davon sind aufgetaucht. :) – dmg

+0

: D Menschen und ihre verrückte Logik. : P BTW, soll ich diesen Kommentar als Antwort posten? Es sagt nicht wirklich, wie man es löst. Ich bin mir auch nicht sicher, wie Sie fehlerhafte Anfragen bearbeiten. –

Antwort

11

Why this error is happening ?

, da der Server eine ungültige Anforderung recieving, die aus vielen Gründen geschehen kann. jemand könnte das Laden der Seite abgebrochen haben, jemand könnte eine beschissene Internetverbindung haben, die ausgeschnitten wurde, kosmische Strahlung könnte ein wenig gewendet haben.

es ist nicht etwas, worüber man sich wirklich Sorgen machen muss, bis es sehr häufig passiert. Vielleicht möchten Sie eine Notiz machen, wenn diese Fehler passieren und sehen, ob es sich folglich auf der gleichen Seite befindet oder nicht.

How to solve?

können Sie nicht. zumindest an diesem Punkt nicht. Sammeln Sie weitere Daten darüber, wann genau dieser Fehler auftritt. sehen Sie, ob Sie einen Weg finden können, es manuell auszulösen.

3

Mit einer Anwendung im Maßstab erhalten Sie immer die gelegentliche abgebrochene Anfrage. Wenn Sie 500 E-Mails erhalten, können sie ziemlich mühsam sein.

Ich würde nicht empfehlen, sie vollständig zu ignorieren. Wenn UnreadablePostErrors hereinströmen, stimmt etwas nicht, z. längere Antwortzeiten bewirken, dass Benutzer Anforderungen abbrechen.

Meine Lösung war, 1/20 UnreadablePostErrors zu ignorieren. Auf diese Weise werde ich immer informiert, wenn etwas schief geht, aber ich werde 20x weniger belästigt. Es ist ein bisschen dreckig, aber es hat für mich funktioniert.

import logging 
import random 
from django.http import UnreadablePostError 

class ReduceUnreadablePostErrors(logging.Filter): 
    def filter(self, record): 
     if record.exc_info: 
      exc_value = record.exc_info[1] 
      if isinstance(exc_value, UnreadablePostError): 
       return random.randint(1,20) % 20==0 
     return True 

settings.py:

'filters': { 
    'reduce_unreadable_post_errors' : { 
     '()' : 'path.to.your.ReduceUnreadablePostErrors' 
    }, 

    ... 

'handlers': { 
    'mail_admins': { 
     'level': 'ERROR', 
     'filters': ['require_debug_false','reduce_unreadable_post_errors'], 
     'class': 'common.utils.log.AdminEmailHandlerWithEmail' 
    }, 

    ... 
+2

Schöne Lösung. Einen auslaufenden Cacheschlüssel (60 Sekunden? Ich weiß nicht, welche Frequenz.) Könnte auch eine gute Lösung sein. – pztrick