Python Dreamhost上的Django和乘客:对浏览器没有响应,没有错误

Python Dreamhost上的Django和乘客:对浏览器没有响应,没有错误,python,django,passenger,wsgi,dreamhost,Python,Django,Passenger,Wsgi,Dreamhost,我正试图在我的dreamhost帐户上运行一些琐碎的Django。在选择Dreamhost之前,我确实做了家庭作业,但直到最近才决定尝试Django 无论如何,我有一个小应用,我想在something.mydomain.com下运行。乘客已启用 当我访问一个静态页面时,它会很好地加载~/something.mydomain.com/public/。 当我访问任何其他页面(例如something.mydomain.com/admin)时,url应该由我的Django应用程序处理 这就是我被卡住的地

我正试图在我的dreamhost帐户上运行一些琐碎的Django。在选择Dreamhost之前,我确实做了家庭作业,但直到最近才决定尝试Django

无论如何,我有一个小应用,我想在something.mydomain.com下运行。乘客已启用

当我访问一个静态页面时,它会很好地加载~/something.mydomain.com/public/。 当我访问任何其他页面(例如something.mydomain.com/admin)时,url应该由我的Django应用程序处理

这就是我被卡住的地方;页面不会加载,也不会抛出错误。它一直试图永远加载(还没有超时)。我对日志了解不多;我自己什么也没找到

我猜~/something.mydomain.com/中的乘客_wsgi.py有问题。我试过不同的版本

这名乘客让……停下来?如上所述

import sys, os, django
sys.path.append("/home/me/something.mydomain.com/")
os.environ['DJANGO_SETTINGS_MODULE'] = 'something.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
import sys, os, django
sys.path.append("/home/me/something.mydomain.com/")
os.environ['DJANGO_SETTINGS_MODULE'] = 'something.settings'
def application(environ, start_response):
    write = start_response('200 OK', [('Content-type', 'text/plain')])
    return ["Hello, world!"]
这位乘客高兴地说:“你好,世界!”是我

import sys, os, django
sys.path.append("/home/me/something.mydomain.com/")
os.environ['DJANGO_SETTINGS_MODULE'] = 'something.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
import sys, os, django
sys.path.append("/home/me/something.mydomain.com/")
os.environ['DJANGO_SETTINGS_MODULE'] = 'something.settings'
def application(environ, start_response):
    write = start_response('200 OK', [('Content-type', 'text/plain')])
    return ["Hello, world!"]
所以我倾向于相信关于WSGIHandler()的某些内容没有得到适当的处理

我在python shell中尝试了这一点:

>>> import django
它没有错误


现在怎么办?

我放弃在Dreamhost上使用Django,因为他们的服务器会定时强制终止任何wsgi进程。之后,一个新请求必须启动一个新实例,在我的例子中,这意味着查询有时需要10-15秒。对于大多数人来说,这已经足够让他们认为网站已经关闭并放弃了


这可能不是您的特殊问题,但我希望即使您的网站正常运行,您也不会感到高兴。

我同意Ben和Chris的观点,DH shared env绝对不适合为大型项目提供服务。然而,好吧,超时是基于最后一次加载,所以如果你有一个稳定的流,你的应用程序应该-理论上运行良好。:)

无论如何,我经常使用DH的共享乘客作为概念证明,而且服务很好,价格也很好

关于您的问题-Passenger在捕获和解析Rails错误方面做得很好,但是当出现异常时,您用于Django的实验性WSGI实现将终止。一种解决方法是运行一些中间件,该中间件捕获错误并将其很好地传递给乘客

有关更多详细信息和示例,请阅读:

我在DH上遇到了一系列类似的问题。我最终构建了自己的Python来代替他们的Python,从那以后就没有任何问题了

设置一些路径:

echo 'PATH="$HOME/bin:$PATH"' >> ~/.bash_profile
echo 'LD_LIBRARY_PATH=$HOME/lib/' >> ~/.bash_profile
source ~/.bash_profile 
安装Python:

wget http://python.org/ftp/python/2.7/Python-2.7.tgz
tar -xzvf Python-2.7.tgz
rm Python-2.7.tgz
cd Python-2.7
./configure --prefix=${HOME}
make
make install
cd ..
rm -rf Python-2.7 
要调整WSGI处理程序,请执行以下操作:

import sys, os
INTERP = "/home/example_user/bin/python"
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)
sys.path.append("/home/example_user/example.com")
os.environ["DJANGO_SETTINGS_MODULE"] = "example_project.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我能够使用模块为WSGI应用程序获得良好的调试设置。我认为这也可以与Django集成

首先,我假设您在主目录下的
~/env
下安装python,并且python处于活动状态

第二,安装功能,以修补

最后一步是设置
passenger\u wsgi.py
文件:

import sys, os

DEBUG   = True
ROOT    = os.path.dirname(os.path.abspath(__file__))
INTERP  = '/home/HOMEDIR/env/bin/python'

sys.path.insert(1,ROOT)        # for when your app is in your web dir
if sys.executable != INTERP:
   os.execl(INTERP, INTERP, *sys.argv)

from myapp import app as application

if DEBUG:
   application.debug=True
   from werkzeug_debugger_appengine import get_debugged_app
   application = get_debugged_app(application)
不要忘记强制乘客重新启动:

touch ~/domain.com/tmp/restart.txt
现在,当您遇到异常时,您将得到如下页面:


就我个人而言,我是WebPosition的一员,我发现他们很棒,包括Django。如果您正在寻找另一个能够与Django和WSGI很好地配合的主机,那么WebPosition就是其中之一。我想,我已经为dreamhost支付了费用。感谢您的进一步解释。我会尝试一下中间件,然后再报告。我正在认真考虑搬到linode,但我还是想让它发挥作用。