2

応答として Excel としてデータを読み込もうとすると、IO 要求データ読み取りエラーが発生します。

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

データが 150k 未満の場合は問題なく動作しますが、より大きなファイルは約 200k で失敗します。django 1.4 Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 をデーモン モードと Python/2.7.3 で実行しています。

これは localhost で正常に動作します。これは、デーモン モードでの 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
4

1 に答える 1

3

apacheの設定を確認し、見つけられるかどうかを確認してくださいLimitRequestBody

もしそうなら、それをより大きな数に変更し、見つからない場合は、サイト構成の下に、次の部分を追加します

LimitRequestBody 1024000000 

また、uwsgiのファイル制限オプションを確認し、次のオプションでuwsgiを起動します。

uwsgi --limit-post 1024000000 

この種のエラーは、アップロードがapache / nginx/uwsgiの最大アップロード設定を超えていることです。また、uwsgiを使用していない可能性があり、リクエストの本文を制限し、 LimitRequestBodyをデフォルトで低い値に設定すると役立つ場合があります。

于 2012-07-02T10:12:47.147 に答える