Django:Dreamhost上的Passenger出现500内部服务器错误

时间:2013-04-20 13:57:32

标签: django passenger wsgi dreamhost

我这里有一点问题。我正在dreamhost(共享主机)上的django中构建一个项目。当我处于调试模式和使用内置服务器时,一切都很好,但是当我尝试切换到prod时,我得到500内部服务器错误。我在互联网上的每个黑暗的房间里搜索解决方案,但仍然没有找到它。

所以,这是我的设置:

我的文件夹:

/home/user/.virtualenvs/myenv/
/home/user/project/
/home/user/project/sqlite.db
/home/user/project/project/settings.py
/home/user/example.com/project (a symlink to /home/user/project)
/home/user/example.com/passenger_wsgi.py
/home/user/example.com/public/

我的passenger_wsgi.py:

import sys, os

INTERP = "/home/user/.virtualenvs/myenv/bin/python"
if sys.executable != INTERP:
    os.execl(INTERP, INTERP, *sys.argv)

sys.path.append('/home/user/.virtualenvs/myenv/lib/python3.3/site-packages')
sys.path.append('/home/user/example.com')
sys.path.append('/home/user/example.com/project')

os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

有谁知道如何解决这个问题?

修改

我忘了提,我安装了python 3和django 1.5因为DH的默认版本太旧了。

1 个答案:

答案 0 :(得分:2)

在目录/home/user/example.com中,您还需要为数据库文件添加符号链接。

此外:

  • 您只需将/home/user/example.com/project附加到路径即可。其他两个没有必要,但它们不应该引起问题。
  • 您可以使用/home/user/example.com/project代替硬编码路径os.getcwd()

    sys.path.append(os.path.join(os.getcwd(), 'project'))
    

在对项目或项目中的其他文件进行更改后,请不要忘记touch tmp/restart.txt通知乘客。

顺便说一句,目前Django使用Python版本2.6.5到2.7,并且实验性支持3.2和3.3。根据DreamHost上的Python wiki,大多数服务器应该使用截至2012年2月的Python 2.6.6,除了一些服务器。使用python --version检查您的Python版本,如果它不是2.6.6,那么您可以要求支持团队在您的服务器上升级它。

我尝试在DreamHost上使用Django和Python 3.2或3.3,但这是有问题的。它不适用于3.2,因为Apache的mod_wsgi模块目前似乎不适用于此版本。如果您从源代码安装它,它可以工作,但作为共享托管,我们无法控制它。我不确定,但如果mod_wsgi不适用于3.2那么它也不适用于3.3。所以我认为如果你想在Dreamhost上使用Django,最好坚持使用支持的2.x版本。

相关问题