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

时间:2015-03-18 18:03:04

标签: python django passenger dreamhost

我一直在本地开发一个django项目,并尝试将其部署到我的dreamhost帐户。我编写了许多过时教程的指令,并在Python 3.4.3下自定义了python和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安装下完美运行。但是当我包含它们时,我在提出请求时得到一个空的响应。

我尝试了许多检查可执行文件的不同方法,但无法让它们正常工作。为什么这是一个空洞的回应?如果不能正常工作,不应该出现错误吗?我在错误日志中找不到任何内容。

1 个答案:

答案 0 :(得分:0)

问题在于我没有将我的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()