我这里有一点问题。我正在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的默认版本太旧了。
答案 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版本。