我正在尝试让apache使用virtualenv
的python可执行文件提供驻留在特定virtualenv
中的django测试站点,但它拒绝使用除默认系统python之外的任何内容。
我正在运行RedHat的服务器上工作。 Apache2和mod_wsgi与python 2.6.6一起安装。我有一个旧的站点,运行在我要升级的python 2.4和django 1.2上,但首先我需要在virtualenv
设置中使用python 2.4在这些版本中运行它。我已经完成了每一步操作除了我似乎无法获得apache来更改它用于传递django站点的python可执行文件。出于测试目的,我只使用django默认" It Work!"初始页面,然后故意强制编程错误让django错误页面告诉我正在使用哪个python可执行文件来传递它。
我的VirtualHost
文件的httpd.conf
部分是:
<VirtualHost *:443>
#WSGIScriptAlias / var/www/mysite/index.wsgi
#WSGIDaemonProcess python-path=/home/jnett/python24sites/lib/python2.4/site-packages
<Location "/python24sitetest">
SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonOption django.root /python24sitetest
SetEnv DJANGO_SETTINGS_MODULE python24sitetest.settings
SetEnv PYTHON_EGG_CACHE "/tmp"
PythonPath "['/var/www/python24sitetest', '/var/www'] + sys.path"
PythonDebug On
PythonInterpreter python24sitetest
</Location>
</VirtualHost>
我已经尝试了我能想到的WSGIDaemonProcess
,WSGIPythonPath
和WSGIPythonHome
的所有可能的组合/排列,但apache总是只使用系统默认的python 2.6,无论我是什么尝试。
如何强制apache使用它所在的virtualenv
的特定python可执行文件来传递这个特定的django站点?
[编辑]我还尝试将WSGIScriptAlias
添加到httpd.conf
(上面评论过),其中文件index.wsgi
位于django项目的主目录中并包含
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('/home/jnett/python24sites/lib/python2.4/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('//home/jnett/python24sites/projects/mysite')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
# Activate your virtual env
activate_env=os.path.expanduser("/home/jnett/python24sites/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
我仍然没有任何效果。
答案 0 :(得分:2)
在你的配置中,你实际上使用的是mod_python(有点过时,与mod_wsgi完全不同)。
要使用mod_wsgi部署Django,它基本上归结为此,per Django docs:
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Order allow, deny
Allow from alll
</Files>
</Directory>
此外,您应该将mod_wsgi设置为守护进程模式,以隔离您的环境:
WSGIDaemonProcess example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages
WSGIProcessGroup example.com
要更改给定环境的Python可执行文件,请查看WSGIPythonExecutable指令。