我一直在本地开发一个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安装下完美运行。但是当我包含它们时,我在提出请求时得到一个空的响应。
我尝试了许多检查可执行文件的不同方法,但无法让它们正常工作。为什么这是一个空洞的回应?如果不能正常工作,不应该出现错误吗?我在错误日志中找不到任何内容。
答案 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()