在守护进程模式下运行 Apache/mod_wsgi 的 Django 应用时出现文件上传问题

在守护进程模式下运行 Apache/mod_wsgi 的 Django 应用时出现文件上传问题

我有一个使用 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,也没有说正在使用哪种浏览器,但这只是猜测。

相关内容