上传1-2mb文件工作正常。 当我尝试上传16mb文件时,几秒后我得到502错误
更多信息:
def upload(request):
if request.method == 'POST':
f = File(data=request.FILES['file'])
f.save()
return redirect(reverse(display), f.id)
else:
return render('filehosting_upload.html', request)
render(template,request [,data])是我自己的简写,处理一些ajax的东西;
filehosting_upload.html
:
{% extends "base.html" %}
{% block content %}
<h2>File upload</h2>
<form action="{% url nexus.filehosting.views.upload %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file">
<button type="submit" class="btn">Upload</button>
</form>
{% endblock %}
我能找到的日志中没有任何信息。
版本:
命令行参数
command=/var/www/ernado/data/envs/PROJECT_NAME/bin/gunicorn -b localhost:8801 -w 4 PROJECT_NAME:application
相关位置的Nginx配置:
location /files/upload {
client_max_body_size 100m;
proxy_pass http://HOST;
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
}
2013/03/23 19:31:06 [error] 12701#0: *88 upstream prematurely closed connection while reading response header from upstream, client: MY_IP, server: HOST, request: "POST /files/upload HTTP/1.1", upstream: "http://127.0.0.1:8801/files/upload", host: "HOST", referrer: "http://HOST/files/upload"
2013-03-23 19:31:06 [12634] [CRITICAL] WORKER TIMEOUT (pid:12829)
2013-03-23 19:31:06 [12634] [CRITICAL] WORKER TIMEOUT (pid:12829)
2013-03-23 19:31:06 [13854] [INFO] Booting worker with pid: 13854
更新1 试过建议的配置
gunicorn --workers=3 --worker-class=tornado --timeout=90 --graceful-timeout=10 --log-level=DEBUG --bind localhost:8801 --debug
现在适合我。
答案 0 :(得分:3)
我用这些参数运行我的gunicorn,试试:
python manage.py run_gunicorn --workers=3 --worker-class=tornado --timeout=90 --graceful-timeout=10 --log-level=DEBUG --bind 127.0.0.1:8151 --debug
或者如果您的运行方式不同,您可以运行该选项
答案 1 :(得分:0)
您需要使用其他工作类型类,如 gevent 或 tornado 等异步,请参阅此更多说明: 第一个解释:
如果您希望应用程序代码在请求处理期间需要长时间暂停,则可能还需要安装Eventlet或Gevent
第二个:
默认同步工作者假定您的应用程序在CPU和网络带宽方面受资源限制。通常这意味着您的应用程序不应该执行任何需要不确定时间的事情。例如,对互联网的请求符合此标准。在某些时候,外部网络将以客户端堆积在服务器上的方式失败。
答案 2 :(得分:0)
对于大文件处理,您应该使用工人级。另外在python 3.7中使用gevent时遇到了一些麻烦,最好使用3.6。
Django,Python 3.6示例:
安装:
pip install gevent
运行
gunicorn --chdir myApp myApp.wsgi --workers 4 --worker-class=gevent --bind 0.0.0.0:80 --timeout=90 --graceful-timeout=10