之前实现此设置没有任何问题,在家里设置了一个新服务器并想开展一些 django 项目。
我使用 virtualenv 和 virtualenvwrapper,mod_wsgi 模块似乎安装正确。这是我使用的 vhost
<VirtualHost *:80>
ServerName local.projectname.com
ServerAlias local.projectname.co.uk
WSGIDaemonProcess site-dev1 user=mike group=mike threads=20 python-path=/home/mike/envs/projectenv/lib/python2.6/site-packages
WSGIProcessGroup site-dev1
WSGIScriptAlias / /home/mike/Sites/path/project/django.wsgi
<Directory /home/mike/Sites/path/project>
Options +Indexes FollowSymLinks +ExecCGI
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
</Directory>
# Allow cross domain @font-face styles for Firefox
<FilesMatch "\.(ttf|otf|eot)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
当我尝试导航到项目时,我收到 500 内部服务器错误,这是 apache 错误日志的输出
[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1] Traceback (most recent call last):
[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1] File "/home/mike/Sites/outsideline/queenonline/queenonline.wsgi", line 16, in <module>
[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1] from django.core.handlers.wsgi import WSGIHandler
[Sun Jul 24 08:46:32 2011] [error] [client 127.0.0.1] ImportError: No module named django.core.handlers.wsgi
我可以从 django.core.handlers.wsgi 导入 WSGIHandler,没有任何错误,据我了解,WSGIdaemon 的进程和组应该是文件的用户和组所有者,我还将我的 apache 用户和组设置为以 mike:mike 身份运行,看看是否可行
我现在完全没有主意了,所以如果有人能对此有所启发,我将永远感激不尽!
答案1
检查 PYTHONPATH
要调试此问题,您可以使用记录器(Python 记录器)将 .wsgi 脚本的日志输出到文件中。可以使用 sys.path 在 Python 内部读取 PYTHONPATH
import sys
log = open("/tmp/log.txt", "wt") # ghetto logging
print >> log, sys.path # you'll see what you have PYTHONPATH when running the script
然后你可以检查 Python 是否真的可以打开文件
import sys
log = open("/tmp/log.txt", "wt") # ghetto logging
try:
f = open("/path/to/django/__init__.py", "rt")
exception Exception, e:
print >> log, str(e)