带有Passenger的Dreamhost上的Django:没有对浏览器的响应,没有错误

时间:2010-11-23 00:31:08

标签: python django passenger wsgi dreamhost

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

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

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

这是我被卡住的地方;页面未加载且不会引发错误。它始终尝试加载(还没有超时)。我对日志知之甚少;我自己也找不到任何东西。

我的猜测是〜/ something.mydomain.com /中的passenger_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!"]

所以我倾向于相信WSGIHandler()的某些内容没有得到适当的适应。

我在python shell中试过这个:

>>> import django

并没有错误。

现在怎么办?

4 个答案:

答案 0 :(得分:1)

我放弃了在Dreamhost上使用Django,因为他们的服务器在定时的基础上强行杀死任何wsgi进程。之后,新请求必须启动一个新实例,在我的情况下,这意味着查询有时需要10-15秒。对于大多数人来说,这段时间足以让他们认为该网站已经停止并放弃了。

这可能不是您的特殊问题,但即使您 让您的网站正常运行,我也希望您不会满意。

答案 1 :(得分:1)

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

首先,我假设您在~/env下的主目录中设置了python virtualenv并且处于活动状态。

其次,安装werkzeug-debugger-appengine函数,以修补werkzeug debugger

cd ~
mkdir src
cd src
git clone https://github.com/nshah/werkzeug-debugger-appengine.git
cd werkzeug-debugger-appengine
python setup.py install

最后一步是设置passenger_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

现在,当你遇到异常时,你会得到一个如下所示的页面:

Werkzeug Debugger Output

答案 2 :(得分:0)

我同意Ben和Chris,因为DH共享env绝对不适合服务大型项目。但是,Afaik,超时是基于最后一次加载,所以如果你有稳定的流你的应用程序应该 - 理论上! - 运行正常。 :)

无论如何,我使用DH的共享乘客进行了很多概念验证,而且价格非常便宜。

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

阅读更多详情和示例: http://wiki.dreamhost.com/Passenger_WSGI#500_Errors_with_Passenger_WSGI_Workaround

答案 3 :(得分:0)

我最初在DH上遇到了一系列类似的问题。我最终构建了自己的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()