我有一个使用 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。
猜测一下,您运行的不是最新的 mod_wsgi 2.X 版本,而是使用 Opera 浏览器。
Opera 存在一个已知问题,它在使用 mod_wsgi 守护程序模式时使用 HTTP 100-continue。此问题已在 mod_wsgi 2.4 中修复。
因为虽然你没有说你正在使用什么版本的 mod_wsgi,也没有说你正在使用哪个浏览器,所以这只是一个猜测。