使用/tmp$ django startproject testsite
配置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
答案 0 :(得分:0)
做到这一点的是设置正确的访问位。
基本上即使在sys.path
中启用了正确的站点包,对于apache,www-data
用户也没有读取或执行这些文件的权限。
此外,由于这些文件位于我的用户的家庭位置,我让其他用户能够阅读和执行我的主文件夹。
现在这很可能是一个坏主意,您通常要做的是创建一组用户,将apache用户添加到该组,并允许该组中的用户读取和执行该文件一个人需要。