Вопрос по django, mod-wsgi, python – django UnreadablePostError: ошибка чтения данных запроса

15

Я работаю над проектом Django, и я получил эту ошибку по электронной почте.

Трассировки стека

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

Почему эта ошибка происходит?

Как решить?

: D Люди и их сумасшедшая логика. : P Кстати, я должен опубликовать этот комментарий как ответ? Это неправда сказать, как решить это. Я'Я также не уверен, как вы работаете с неработающими запросами. Bibhas Debnath
Мы только что обновились до mod_wsgi 4.2.8, и все эти ошибки исчезли. Ура! gorus
Выглядит как дубликатstackoverflow.com/questions/3823280/... guettli
@Bibhas Ну, технически этоне фактическая ошибка сервера. Больше об ошибке клиента. Вы можете записать его в более удобочитаемом виде. dmg

Ваш Ответ

2   ответа
8

выЯ всегда получу случайный отмененный запрос. Если ты'Получив 500 писем, они могут быть довольно утомительными.

Я бы несоветую полностью игнорировать их. Если вливаются UnreadablePostErrors, то что-тонеправильно, например более длительное время ответа заставляет пользователей отменять запросы.

Мое решение было игнорировать 1/20 UnreadablePostErrors. Таким образом, если что-то пойдет не так, яЯ все еще буду в курсе, но ябудет приставать в 20 раз меньше. Это'немного грязно, но у меня это сработало.

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'
     },

     ...
Хорошее решение. Использование устаревшего ключа кэша (60 секунд? Я нене знаю, с какой частотой.) также может быть хорошим решением. pztrick
15

потому что сервер получает некорректный запрос, что может произойти по многим причинам. кто-то можетмы отменили загрузку страницы, у кого-то может быть плохое подключение к Интернету,космические лучи могли бы немного перевернуться.

Это'Это не то, о чем вам действительно нужно беспокоиться, пока это не начнет происходить очень часто. Вы можете сделать заметку, когда эти ошибки произойдут, и посмотреть,s, следовательно, на той же странице или нет.

Как решить?

вы можете'т. по крайней мере, на данный момент. собрать больше данных о том, когда именно эта ошибка возникнет. посмотрим, сможете ли вы найти способ вызвать его вручную.

Похожие вопросы