我有一个使用 mod_wsgi 在 Apache2 (linux) 下运行的 Django 应用程序,在守护进程模式下运行时文件上传失败,但在嵌入 Python 解释器时可以上传。知道是什么原因造成的吗?我该如何修复它?
以下 Apache 配置正在运行:
<VirtualHost *:80>
ServerName mysite.com
DocumentRoot /var/www/
Alias /media/ /var/www/media/
<Directory /var/www/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
Include /etc/apache2/yslow_optimizations.conf
</Directory>
WSGIScriptAlias / /var/djangoapp/apache/django.wsgi
<Directory /var/djangoapp/apache/>
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/mysite.error.log
CustomLog /var/log/apache2/mysite.access.log combined
</VirtualHost>
但是,当我添加以下指令来守护 wsgi 进程时,文件上传立即失败。
WSGIDaemonProcess mygroup display-name=%{GROUP} inactivity-timeout=600
WSGIProcessGroup mygroup
Apache 错误日志中似乎没有任何内容。
Django 表单使用 FileField,在执行 form.is_valid() 时只会给出“此字段是必填项”错误。视图有一个 @login_required 装饰器。在嵌入模式下运行时,所有这些都运行良好。
作为守护进程运行可以更加优雅地更新代码(只需触碰 wsgi 文件),而不是嵌入时需要 Apache 重新加载,所以如果可能的话我更喜欢这样。
更新:该问题出现在 Opera 上,而不是 FireFox 上。
答案1
猜测一下,您没有运行最新的 mod_wsgi 2.X 版本,并且正在使用 Opera 浏览器。
使用 mod_wsgi 守护进程模式时,Opera 及其 HTTP 100-continue 的使用存在一个已知问题。此问题已在 mod_wsgi 2.4 中修复。
虽然您没有说正在使用哪个版本的 mod_wsgi,也没有说正在使用哪种浏览器,但这只是猜测。