如何让apache在django

时间:2015-04-30 21:27:36

标签: python django apache virtualenv mod-wsgi

我正在尝试让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>

我已经尝试了我能想到的WSGIDaemonProcessWSGIPythonPathWSGIPythonHome的所有可能的组合/排列,但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()

我仍然没有任何效果。

1 个答案:

答案 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指令。