2012-12-06 53 views
2

我想部署Django(位于virtualenv)在Apache上使用WSGI部署。我下面从https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/Django Apache的wsgi virtualenv导入错误

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导入的模块是不可导入的。 教程说:

A further change required to the above configuration if you use daemon mode is that you can't use WSGIPythonPath; instead you should use the python-path option to WSGIDaemonProcess, for example:

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

我缺少什么?

回答

2

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

我知道一个人必须尽可能谨慎地使用权限,并且给所有人提供777并不是最好的方式,但应该检查如何使它在最小权限更改的情况下工作。但它解决了问题中的问题。

1

对于单个应用程序,这是开箱即用的最简单的方法,请参阅http://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Baseline_Environment既不能使用WSGIPythonPath,也不能只使用WSGIPythonPath,但必须是全局的。

WSGIPythonHome [path to virtualenv folder] 

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

+0

做了什么用途和教程建议。在Apache日志中结束了:“ImportError:No module named site”。将代码更改为之前的版本,但日志不断更新,因此wsgi.py中没有更多的“导入网站” – TheMeaningfulEngineer

+0

然后,您正在使用针对与虚拟环境不同的Python版本编译的mod_wsgi,或者你填满了你设置WSGIPythonHome的东西。因为如果使用mod_wsgi 3.4而不是WGSIPythonHome,则使用守护进程模式,请使用WSGIDaemonProcess指令的python-home选项。 –

+0

@GrahamDumpleton,但我没有看到'WSGIDaemonProcess'指令中的'python-home'选项 https://code.google。com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess – eldos

1

pythonpath envinronment不同于我认为的apache。
安装Django “globaly” 用的easy_install或点子

或.virtualenv PYTHONPATH添加到mod_wsgi的配置

WSGIPythonPath目录|目录1:目录2:

MOD_wsgi config

+1

我想在守护进程模式下使用wsgi,并且在Django文档中指定,在这些情况下,“WSGIPythonPath”不起作用,但必须使用“WSGIDaemonProcess example.com”python-path =/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages” – TheMeaningfulEngineer