2014-02-26 12 views
1

创建一个新的Django项目与/tmp$ django startproject testsite为什么apache2(2.2)没有加载django(1.6.1)?

配置的Apache2运行在/tmp/testsite/testsite/wsgi.py

有一个简单的线条import django的wsgi.py中的应用程序(这是一切的时刻,因为我试图调试)。

我做配置httpd.conf中运行WSGI文件,(我认为)的作品,因为日志100克这样的:

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所需要的库。路径,具有打印 - 这表明,在运行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的输出([ '它' ,'python'])但是那有最奇怪的结果 - 返回0,我不知道如何解释它

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

[编辑]是 - 我可以从一个解释器,进口Django的时候指定的路径是在sys.path,并django.__file__回报/home/local/smth/user/ve/tmp1/local/lib/python2.7/site-packages/django/__init__.pyc

+1

在'subprocess.call'上 - 这就是它返回的结果。你的进程的返回代码(如果进程成功返回,通常为0)。如果您希望它从该进程输出stdout,则必须执行其他步骤。 无论如何,显而易见的问题,但实际安装在'/ home/local/smth/user/ve/tmp1/lib/python2.7/site-packages'中的完整'django'包?此外你的mod_wsgi版本可能是相关的。 – Iguananaut

+0

在您的虚拟环境中,“导入django”是否在Python shell中工作?如果是这样,'django .__ file__'中有什么? – lanzz

+0

@Iguananaut编辑了答案。导入django在控制台中工作。 –

回答

0

这样做的事情是设置适当的访问位。 基本上,即使sys.path中正确的站点包已打开,但用于Apache的www-data用户也没有读取或执行这些文件的权限。

此外,由于这些文件位于我的用户的家中,因此我给了其他用户读取和执行我的个人文件夹的能力。

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