2013-04-20 53 views
1

我在这里有一个小问题。我正在Dreamhost(共享主机)上的django上构建一个项目。一切正常,当我在调试模式,当我使用内置服务器,但是当我试图切换生产我得到一个500内部服务器错误。我在互联网上的每间黑屋子里寻找解决方案,但仍未找到答案。Django:与Dreamhost上的乘客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的Cuz在DH默认版本太旧。

+0

您是否检查过服务器日志中引发的实际错误? – 2013-04-20 14:06:00

+0

是的 [Sat Apr 20 05:59:26 2013] [错误] [客户端xxx.xxx.xxx.xxx]脚本标题的过早结束:internal_error.html – Firas 2013-04-20 14:11:06

+0

嗯,这相当广泛,试过这些呢? https://code.google.com/p/modwsgi/wiki/FrequentlyAskedQuestions – 2013-04-20 14:14:09

回答

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上使用Python 3.2或3.3的Django,但它有问题。它不适用于3.2版本,因为Apache的mod_wsgi模块目前似乎不适用于此版本。它可以工作,如果你从源代码安装它,但作为共享主机,我们无法控制。我不确定,但如果mod_wsgi不适用于3.2,那么它也不适用于3.3。所以我认为如果你想在Dreamhost上使用Django,最好坚持使用支持的2.x版本。

+0

谢谢,但它没有工作。也许我应该回滚到Django 1.4 – Firas 2013-04-25 00:28:36

+1

我更新了我的答案。它必须工作,所以不要放弃! – janos 2013-04-25 06:12:13

+0

Aaaaaaaaaaand它工作!我的服务器有Python 2.6.6,所以我刚刚创建了一个新的virtualenv,移动了我的项目,将乘客的INTERP路径改为python 2.6.6,重新启动DH,并且它终于起作用了。非常感谢Janos,这对我非常有帮助,因为我认为问题出在乘客身上,我从来没有想过切换到另一个Python版本。 – Firas 2013-04-25 18:29:16