2

I'm getting an IO request data read error when trying to loading data as Excel in response.

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

It works fine when the data is under 150k, but the bigger file fails at around 200k. I'm running django 1.4 Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 with daemon mode and Python/2.7.3.

This works fine in localhost. I guess this might be an issue or bad configuration of wsgi with daemon mode. Does anyone know about this?

The exception I am getting is below.

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
1
  • Were you able to resolve this? Commented Jan 23, 2014 at 19:48

1 Answer 1

3

check your apache config, and see whether you could find LimitRequestBody

if so, change it to a bigger number, if not find, under your site config, add following piece

LimitRequestBody 1024000000 

also, check your uwsgi's file limit option, start your uwsgi with following option:

uwsgi --limit-post 1024000000 

this kind of error is your upload exceeds your apache/nginx/uwsgi max upload setting. also I notice you may not using uwsgi, limit request body and set LimitRequestBody to be a low value by default might help.

Sign up to request clarification or add additional context in comments.

2 Comments

LimitRequestBody is 104857600. Changed to 1024000000 as you recommended, but still the same
@zomboid uwsgi has some file limit, say "--limit-post 65536" if you start uwsgi with this option, and check to see whether it solves your problem

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.