0

我是一个菜鸟,但我使用它使我的应用程序工作得很好,python manage.py runserver但是当我把它带到 Apache + mod_wsgi 时,我一直收到这个错误。调试消息没有多大帮助。这是整个调试图像的屏幕截图:http: //img694.imageshack.us/img694/6723/screenshotfb.png

这是我的 http.conf 文件的转储。

WWSGIDaemonProcess cloud-tester python-path=/home/ubuntu/.virtualenvs/pinax-env/lib/python2.6/site-packages
WSGIProcessGroup cloud-tester

WSGIScriptAlias /cloudrunner /home/ubuntu/projects/cloudfly/deploy/pinax.wsgi
<Directory /home/ubuntu/projects/cloudfly/deploy>
    Order deny,allow
    Allow from all
</Directory>

pinax.wsgi 的内容是 Pinax 附带的。我没有改变任何东西。

我创建了一个示例“basic_project”,效果很好。这没有。

提前致谢!关于我应该做什么的任何建议?

4

2 回答 2

4

在 Apache/mod_wsgi 下,您的代码将以 Apache 用户身份运行,并且通常没有访问权限来写入您作为用户拥有的目录。读:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Access_Rights_Of_Apache_User

最简单的解决方法是让守护进程以与您手动运行代码相同的用户身份运行。为此,使用 WSGIDaemonProcess 的“用户/组”选项。读:

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

另一个问题可能是您在代码中使用了相对路径名。这在 Apache 下不起作用,因为当前工作目录可以是任何东西。您真的应该始终使用绝对路径名,或者至少相对于 __file__ 的 os.path.dirname() 计算它们正在完成的代码文件。

如果您真的不想处理这个问题,一种解决方法是使用 WSGIDaemonProcess 的“home”选项将守护进程的当前工作目录设置为您手动运行服务器的同一目录。请参阅上面引用的 WSGIDaemonProcess 的相同文档。

于 2010-02-17T05:01:54.480 回答
0

当您使用“python manage.py runserver”时,您以 root 身份登录,这就是为什么允许它写入该director,但是当 apache 启动您的 wsgi 脚本时,它将使用其用户名,不允许在您的目录中写入有你的python脚本。

假设您使用的是 ubuntu 服务器,我遇到了同样的问题。我用

chown www-data:www-data -R 媒体

我将所有 py 脚本保存在 /var/pyproj/ 中。媒体文件夹将位于 /var/pyproj//pysrc(my pinax install director)/site_media/

I keep my wsgi script, nginx conf and vhost.conf in /var/pyproj//server.

Best of luck fellow django user. I hope this helps.

于 2011-01-26T16:47:41.503 回答