使用自定义 python 安装进行 Passenger wsgi 部署

Using custom python installation for Passenger wsgi deployment

我一直在本地开发一个 django 项目,并试图将它部署到我的 dreamhost 帐户。我从许多过时的教程中编译了说明,并为自己安装了 python 和 Python 3.4.3

下的 virutalenv

现在我要尝试设置 passenger_wsgi.py 以使用我设置的虚拟环境。这是基本应用程序的样子(甚至还没有接触 django):

import sys, os

INTERP = os.path.expanduser("~/venv/bin/python")
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)

def application(environ, start_response):
    start_response('200 OK', [('Content-type', 'text/html')])
    return ["Hello, world! from %s: %s\n" % (sys.version, sys.executable)]

如果我删除第 2 行和第 3 行,程序将在 Dreamhost 的 Python 2.7.3 安装下完美运行。但是,当我包含它们时,我在发出请求时得到的是空响应。

我尝试了很多不同的方法来检查可执行文件,但无法使任何一种方法正常工作。为什么它会是一个空响应?如果它不能正常工作,不应该有错误吗?我在错误日志中找不到任何内容。

问题是我没有将 python 插入系统路径。

sys.path.insert(0,'$HOME/venv/bin')

这是一个完整的解决方案与 django 项目的样子。这应该适用于任何 wsgi 兼容 application.

import sys, os
cwd = os.getcwd()
sys.path.append(cwd)
sys.path.append(cwd + '/my_project')

INTERP = os.path.expanduser("~/venv/bin/python")

if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)

sys.path.insert(0,'$HOME/venv/bin')
sys.path.insert(0,'$HOME/venv/lib/python3.4/site-packages/django')
sys.path.insert(0,'$HOME/venv/lib/python3.4/site-packages')

os.environ['DJANGO_SETTINGS_MODULE'] = "my_project.settings"
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()