我正在尝试使用Mod_wsgi让Django和Apache一起工作,目前我遇到以下错误:
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Target WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py' cannot be loaded as Python module.
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Exception occurred processing WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py'.
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] Traceback (most recent call last):
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] File "/home/webdev/websites/virtualenvs/polaris/polaris_project.py", line 8, in <module>
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] import django.core.handlers.wsgi
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] ImportError: No module named django.core.handlers.wsgi
我的apache conf看起来像
Alias /polaris_django/media/ "/home/webdev/websites/virtualenvs/polaris/polaris/static/"
WSGIScriptAlias /polaris_django /home/webdev/websites/virtualenvs/polaris/polaris_project.py
WSGIApplicationGroup %{GLOBAL}
<Directory "/home/webdev/websites/virtualenvs/polaris">
Order deny,allow
Allow from all
</Directory>
我的Mod_WSGi文件看起来像
import os, sys
sys.path.append('/home/webdev/websites/virtualenvs/polaris')
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/apps')
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/extra_settings')
os.environ['DJANGO_SETTINGS_MODULE'] = 'polaris.settings'
print >> sys.stderr, sys.path
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
如何才能正确地为Django提供apache?
答案 0 :(得分:5)
看起来您正在使用virtualenv - 您需要在WSGI脚本中激活它以正确设置路径。
activate_this = os.path.join("path/to/my/virtualenv", "bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
答案 1 :(得分:2)
看起来Django不在你的路上......你能发布你的sys.path的值吗?
答案 2 :(得分:1)
我猜测apache正在使用不同版本的python或正在使用不同的sys.path。你得到什么作为sys.path的输出?
答案 3 :(得分:1)
Django安装在哪里?从命令行Python执行:
import django
print django.__file__
如果它没有安装在/usr/lib/python2.6或/usr/local/lib/python2.6下的sys.path上的相应目录中,那就是问题所在。
假设您实际安装了Django,可能会发生这种情况,因为您有多个已安装的Python版本,并且您使用了不同的mod_wsgi来安装Django。或者您使用了虚拟环境并且没有告诉mod_wsgi它在哪里。或者您设法使用Apache无法读取的权限安装Django。
观看视频和通过以下参考的幻灯片阅读:
http://blog.dscpl.com.au/2010/06/sydney-pycon-modwsgi-talk-slides.html
它们涵盖了这类问题以及许多与权限等相关的其他内容。