我在Redhat的Openshift平台上运行django 1.8应用程序。该应用程序提供RSS提要和文件下载。这些文件通常超过50MB。问题是,当您尝试下载文件时,很可能下载失败。有时候你很幸运,但它(但我猜)有80%的下载失败了。它们并不总是在进度的同一阶段失败,因此有时您可以下载10MB的文件,有时甚至30MB。
我在不同的机器,不同的浏览器甚至是不同的互联网连接后面试过这个。无处不在。
我意识到当下载失败时,日志中会出现错误:
[Sat Apr 09 22:59:49 2016] [error] [client 127.9.XXX.XXX] mod_wsgi (pid=208430): Exception occurred processing WSGI script '/var/lib/openshift/553BLABLABLA/app-root/runtime/repo/wsgi/application'.
[Sat Apr 09 22:59:49 2016] [error] [client 127.9.XXX.XXX] IOError: failed to write data
他们说,在这个帖子How to prevent 'IOError: failed to write data' when client closes connection to Django/WSGI app?中,由于客户端关闭了连接。但我只是下载文件,为什么客户端应该关闭连接,除非它已经完成了?
这是我的WSGI脚本的内容:
#!/usr/bin/env python
import os
import sys
## GETTING-STARTED: make sure the next line points to your settings.py:
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
## GETTING-STARTED: make sure the next line points to your django project dir:
sys.path.append(os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi', 'myproject'))
virtenv = os.environ['APPDIR'] + '/virtenv/'
## GETTING-STARTED: make sure the next line has the right python version:
os.environ['PYTHON_EGG_CACHE'] = os.path.join(virtenv, 'lib/python2.7/site-packages')
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
execfile(virtualenv, dict(__file__=virtualenv))
except:
pass
import django.core.wsgi
application = django.core.wsgi.get_wsgi_application()
有人可以帮忙吗?