为什么apache2(2.2)没有加载django(1.6.1)?

时间:2014-02-26 15:15:34

标签: python django apache

使用/tmp$ django startproject testsite

创建了一个新的django项目

配置apache2以在/tmp/testsite/testsite/wsgi.py中运行该应用程序

在wsgi.py里面有一个简单的行import django(这就是目前的一切,因为我正在尝试调试)。

我确实配置了httpd.conf来运行wsgi文件,(我认为)可以工作,因为日志就像这样:

Wed Feb 26 16:55:07 2014] [error] [client 127.0.0.1] mod_wsgi (pid=12621): Target WSGI script '/tmp/testsite/testsite/wsgi.py' cannot be loaded as Python module.
[Wed Feb 26 16:55:07 2014] [error] [client 127.0.0.1] mod_wsgi (pid=12621): Exception occurred processing WSGI script '/tmp/testsite/testsite/wsgi.py'.
[Wed Feb 26 16:55:07 2014] [error] [client 127.0.0.1] Traceback (most recent call last):
[Wed Feb 26 16:55:07 2014] [error] [client 127.0.0.1]   File "/tmp/testsite/testsite/wsgi.py", line 26, in <module>
[Wed Feb 26 16:55:07 2014] [error] [client 127.0.0.1]     import django
[Wed Feb 26 16:55:07 2014] [error] [client 127.0.0.1] ImportError: No module named django

然后检查我是否在sys.path上有所需的库,带有print - 这表明在运行import语句时,sys.path是正常的(更详细地说,我在sys.path中有/...../sistem-packages

还查看了this链接并尝试了chmod a+x wsgi.py,但仍然出现了相同的错误。

供参考,以下是我的文件:

的httpd.conf

WSGIScriptAlias /vwh /tmp/testsite/testsite/wsgi.py
WSGIPythonPath /tmp/testsite:/home/local/smth/user/ve/tmp1/lib/python2.7/site-packages

<Directory /tmp/testsite/testsite> 
<Files wsgi.py>
Order deny,allow
#Require all granted
Allow from all
</Files>
</Directory>

wsgi.py

import os
import sys
from subprocess import call

#print call(["which", "python"])     #also this gives a VERY weird result... prints `0`

import django

另外,尝试打印subprocess.call(['which','python'])的输出,但结果最奇怪 - 返回0,我不知道如何解释它

[编辑] 我是在路径/home/local/smth/user/ve/tmp1安装的virtualenv

[编辑] 是的 - 当指定的路径位于sys.path时,我可以从解释器导入django,django.__file__返回/home/local/smth/user/ve/tmp1/local/lib/python2.7/site-packages/django/__init__.pyc

1 个答案:

答案 0 :(得分:0)

做到这一点的是设置正确的访问位。 基本上即使在sys.path中启用了正确的站点包,对于apache,www-data用户也没有读取或执行这些文件的权限。

此外,由于这些文件位于我的用户的家庭位置,我让其他用户能够阅读和执行我的主文件夹。

现在这很可能是一个坏主意,您通常要做的是创建一组用户,将apache用户添加到该组,并允许该组中的用户读取和执行该文件一个人需要。