2012-07-02 4 views
2

Я получаю ошибку чтения данных запроса ввода-вывода при попытке загрузить данные в Excel в ответ.IOError: ошибка чтения данных запроса

def convert_to_excel(request): 
    field = forms.CharField() 
    try: data = field.clean(request.POST.get('exceldata', '')) 
    except: data = u'' 
    response = render_to_response("spreadsheet.html", request= request, dictionary = locals()) 
    filename = "%s%s.xls" % ("report_excel", datetime.datetime.today().strftime('%Y%m%d%H%M%S')) 
    response['Content-Disposition'] = 'attachment; filename='+filename 
    response['Content-Type'] = 'application/vnd.ms-excel; charset=utf-8' 
    return response 

Он отлично работает, когда данные находятся в пределах 150 тыс., Но больший размер файла составляет около 200 тыс. Я запускаю django 1.4 Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 с режимом демона и Python/2.7.3.

Это хорошо работает в локальном хосте. Я предполагаю, что это может быть проблема или плохая конфигурация wsgi с режимом демона. Кто-нибудь знает об этом?

Исключением, которое я получаю, является ниже.

Traceback (most recent call last): 
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 89, in get_response 
    response = middleware_method(request) 

File "/usr/local/lib/python2.7/dist-packages/newrelic-1.2.1.265-py2.7.egg/newrelic/hooks/framework_django.py", line 191, in __call__ 
    result = self.__wrapped(*args, **kwargs) 

File "/home/core/mysite/src/task/tools/libs/pagination/middleware.py", line 8, in process_request 
    request.page = int(request.REQUEST.get('page', 1)) 

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 166, in _get_request 
    self._request = datastructures.MergeDict(self.POST, self.GET) 

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

File "/usr/local/lib/python2.7/dist-packages/django/http/__init__.py", line 360, in _load_post_and_files 
    self._post, self._files = self.parse_file_upload(self.META, data) 

File "/usr/local/lib/python2.7/dist-packages/django/http/__init__.py", line 320, in parse_file_upload 
    return parser.parse() 

File "/usr/local/lib/python2.7/dist-packages/newrelic-1.2.1.265-py2.7.egg/newrelic/api/function_trace.py", line 82, in __call__ 
    return self._nr_next_object(*args, **kwargs) 

File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 161, in parse 
    data = field_stream.read() 

File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 301, in read 
    out = ''.join(parts()) 

File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 285, in parts 
    yield ''.join(self) 

File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 316, in next 
    output = self._producer.next() 

File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 449, in next 
    for bytes in stream: 

File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 316, in next 
    output = self._producer.next() 

File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 377, in next 
    data = self.flo.read(self.chunk_size) 

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

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 104, in read 
    result = self.buffer + self._read_limited(size - len(self.buffer)) 

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

File "/usr/local/lib/python2.7/dist-packages/newrelic-1.2.1.265-py2.7.egg/newrelic/api/web_transaction.py", line 349, in read 
    data = self.__input.read(*args, **kwargs) 

IOError: request data read error 
+0

Вы смогли это решить? –

ответ

3

проверить апачские конфигурации, и посмотреть, можно ли найти LimitRequestBody

если да, то изменить его на большее количество, если не найти, под вашим сайтом конфигурации, добавьте следующий куском

LimitRequestBody 1024000000 

также проверьте предел файла параметр настройки uwsgi, начните свой uwsgi с следующей опцией:

uwsgi --limit-post 1024000000 

такая ошибка - ваша загрузка превышает настройку загрузки apache/nginx/uwsgi max. также я замечаю, что вы не можете использовать uwsgi, limit request body и set LimitRequestBody to be a low value by default могут помочь.

+0

LimitRequestBody - 104857600. Изменен до 1024000000, как вы рекомендовали, но все тот же – jargalan

+0

@zomboid uwsgi имеет некоторый предел файла, скажем, «-limit-post 65536», если вы запустите uwsgi с этой опцией и проверьте, разрешает ли он твоя проблема – pinkdawn