【问题标题】:Flash-based file upload (swfupload) fails with Apache/mod-wsgi基于 Flash 的文件上传 (swfupload) 使用 Apache/mod-wsgi 失败
【发布时间】:2010-10-30 21:21:48
【问题描述】:

此问题已重新命名/重新标记,以便其他人可以更轻松地找到此问题的解决方案。


我正在尝试将项目从 Django 开发服务器迁移到 Apache/mod-wsgi 环境。如果你昨天问我,我会说过渡非常顺利。我的网站已启动、可访问、快速等。但是,该网站的一部分依赖于文件上传,因此我遇到了最奇怪和最令人抓狂的问题。有问题的特定页面使用swfupload 将文件和关联的元数据发布到捕获文件并启动一些服务器端处理的url。这在开发服务器上工作得很好,但是每当我在 Apache 上发布到这个 url 时,Django 请求对象就会出现空 --没有 GET、POST 或 FILES 数据

我已经通过使用 Wireshark 进行窥探消除了客户端问题。据我所知,根本原因源于某种 Apache 配置问题,可能与我试图访问的临时文件目录有关。我是 Apache 配置的新手,并且已经为此苦苦思索了好几个小时。

我的 Apache 配置:

<VirtualHost *:80>
ServerAdmin user@sitename.com
ServerName  sitename.com
ServerAlias www.sitename.com
LogLevel warn
WSGIDaemonProcess sitename processes=2 maximum-requests=500 threads=1
WSGIProcessGroup sitename
WSGIScriptAlias / /home/user/src/sitename/apache/django.wsgi
Alias /static /home/user/src/sitename/static
Alias /media /usr/share/python-support/python-django/django/contrib/admin/media
</VirtualHost>

我的直觉是,这可能与我在 Django settings.py ('/home/sk/src/sitename/uploads/') 中指定的文件上传目录的权限有关,但是我的 Apache 错误日志并没有提出任何类似的建议,即使日志级别提高到调试。

关于我应该如何进行调试的建议?

【问题讨论】:

  • 与图像相关的 django 设置怎么样,在 django 端如何处理?
  • 嗯,我不确定我是否遵循这些链接的相关性。实际上,我目前根本没有用户上传图像(至少在化身等意义上没有)。此外,由于我使用的是 swfupload,因此我没有使用任何 Django 的内置文件上传处理(MEDIA_PATH、FileField 等)。我的文件在发送到最终存储库之前从临时目录进行后处理。

标签: python flash apache file-upload mod-wsgi


【解决方案1】:

通常 apache 作为用户“www-data”运行;如果它没有读/写访问权限,您可能会遇到问题。但是,您的设置似乎没有使用 apache 来访问“/home/sk/src/sitename/uploads”;我对此配置文件的理解是,除非它命中 /static 或 /media,否则 apache 会将其交给 WGSI,因此最好检查这些权限和日志,而不是 apache 的。

【讨论】:

  • +1:总是权限。总是。在极少数情况下,当它不是权限时,它始终是 PYTHONPATH。在非常罕见的情况下,它不是 PYTHONPATH,它是其他地方的拼写错误的文件名。
  • 这两个 cmets 都遵循我的直觉。今晚我将对 WSGI 权限进行更多调查。我确实尝试了几种变体,包括将守护进程设置为以我的登录用户(当然应该有权访问)运行,但结果是一样的。
  • 嗯,根据 wsgi 文档 (code.google.com/p/modwsgi/wiki/ConfigurationGuidelines),如果 Apache 未以 root 身份启动,则忽略 WSGIDaemonProcess 命令的用户和组参数。这可能是问题所在。如果是这种情况,那么我需要明确授予对“/home/sk/src/sitename/uploads”的 www-data 访问权限。难怪我是程序员而不是系统管理员……该死的权限让我发疯。
  • 好吧,我进行了蛮力测试并递归地修改了项目目录,使其可以被任何用户写入,但仍然没有骰子。我得到完全相同的问题。清空 GET、POST 和 FILES,且日志中没有错误。 PYTHONPATH 的一切看起来都是正确的。接下来将尝试 Mapio 的解决方案,但我愿意接受其他建议。
【解决方案2】:

另一种可能性是 mod_wsgi 的“旧”版本中的错误(我疯狂地寻找并修复它)。此bug report 中的更多信息。感谢following hint(也可以在 CLI 上使用,使用 -H 开关),我修复了它(用于 curl 上传)。

【讨论】:

  • 这听起来和我遇到的问题一模一样,事实上,Ubuntu Jaunty 附带的 modwsgi 版本不包含此修复程序。虽然我没有使用 Opera,但 Flash 肯定有可能表现出类似的行为。您可能是 Mapio 的赢家,在这种情况下,我肯定会因为指出这一点而欠您一杯啤酒。今晚我会测试。 :-)
  • 您先生,请让我永远钦佩。如果您曾经在加利福尼亚,请顺路。我欠你的不止一个。
  • 我住在意大利,但如果我有幸在加利福尼亚度假,我很乐意与您分享!
猜你喜欢
  • 2021-12-07
  • 2014-09-09
  • 2023-03-09
  • 2012-02-16
  • 2016-10-12
  • 1970-01-01
  • 2014-11-24
  • 2015-10-21
相关资源
最近更新 更多