1

我这里有个小问题。我正在django 上dreamhost(共享主机)上构建一个项目。当我处于调试模式和使用内置服务器时,一切正常,但是当我尝试切换到 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/

我的乘客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 中的默认版本太旧了。

4

1 回答 1

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 版本,python --version如果不是 2.6.6,那么您可以要求支持团队在您的服务器上升级它。

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

于 2013-04-24T16:44:54.580 回答