Django Apache wsgi virtualenv导入错误

时间:2012-12-06 21:43:01

标签: django mod-wsgi wsgi django-wsgi

我正在尝试使用WSGI部署在Apache上部署Django(位于virtualenv中)。我正在关注https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/

的默认教程

wsgi.py(Django生成的默认值,删除了注释):

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

apache2.conf(它与Debian中的httpd.conf相同)。把它贴在最后:

WSGIScriptAlias / /home/user/Desktop/expofit/expofit_hg/py/server/server/wsgi.py
WSGIDaemonProcess example.com python-path=/home/user/Desktop/expofit/expofit_hg/py/server:/home/user/Desktop/expofit/expofit_env/lib/python2.7/site-packages
WSGIProcessGroup example.com

<Directory /home/user/Desktop/expofit/expofit_hg/py/server/server>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

Alias /static/ /home/user/Desktop/expofit/expofit_hg/py/server/server/static

<Directory /home/user/Desktop/expofit/expofit_hg/py/server/server/static>
Order deny,allow
Allow from all
</Directory>

然而,这以错误结束:

[Thu Dec 06 17:08:40 2012] [error] [client 192.168.56.1] ImportError: No module named django.core.wsgi

似乎标准python是可访问的,因为

import os

没有错误。因此,似乎从virtualenv导入的模块不可导入。 教程说:

  

如果您使用,则需要进一步更改上述配置   守护进程模式是你不能使用WSGIPythonPath;相反,你应该   使用WSGIDaemonProcess的python-path选项,例如:

WSGIDaemonProcess example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages
WSGIProcessGroup example.com

我错过了什么?

3 个答案:

答案 0 :(得分:2)

问题在于权限。我没有检查用户是谁,以及开始时权限是什么,但是,当我将权限777更改为包含Django代码文件的所有目录时,它开始工作。

我知道一个人必须尽可能小心地使用权限,并且将777提供给所有内容并不是最好的方法,但是应该检查如何使用最小权限更改来使其工作。然而,它解决了问题中的问题。

答案 1 :(得分:1)

对于单个应用程序,这是最容易开箱即用的,请参阅http://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Baseline_Environment这个或使用WSGIPythonPath都不能仅用于vhost,但必须是全局的。

WSGIPythonHome [path to virtualenv folder]

如果您有多个应用程序 - 使用sys.path将您的virtualenv的site-packages文件夹附加到wsgi.py顶部似乎是最简单的事情,请参阅http://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Application_Environments

答案 2 :(得分:1)

你认为你的环境与我认为的apache不同 使用easy_install或pip安装django“globaly”

或将.virtualenv pythonpath添加到mod_wsgi配置

WSGIPythonPath目录| directory-1:directory-2:

MOD_wsgi config