【问题标题】:Django on Dreamhost with Passenger: no response to browsers, no error带乘客的 Dreamhost 上的 Django:对浏览器没有响应,没有错误
【发布时间】:2011-05-14 04:36:48
【问题描述】:

我正在尝试让一些琐碎的 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

它没有给出任何错误。

现在呢?

【问题讨论】:

    标签: python django passenger wsgi dreamhost


    【解决方案1】:

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

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

    【讨论】:

    • 就我个人而言,我使用 WebFaction 并且发现它们很棒,包括 Django。如果您正在寻找另一个可以很好地与 Django 和 WSGI 配合使用的主机,WebFaction 就是其中之一。
    • 所以我收集了,但我已经为 Dreamhost 付费了。
    【解决方案2】:

    我能够使用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
    

    现在,当您遇到异常时,您将获得如下所示的页面:

    【讨论】:

      【解决方案3】:

      我同意 Ben 和 Chris 的观点,因为 DH 共享环境绝对不适合服务于大型项目。然而,Afaik 超时是基于上次加载的,所以如果你有稳定的流,你的应用程序应该 - 理论上! - 运行良好。 :)

      无论如何,我经常使用 DH 的共享乘客来进行概念验证,而且服务很好,价格也很优惠。

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

      阅读以了解更多详细信息和示例: http://wiki.dreamhost.com/Passenger_WSGI#500_Errors_with_Passenger_WSGI_Workaround

      【讨论】:

      • 感谢您的进一步解释。我会试一试中间件并报告。我正在认真考虑搬到一个 linode,但我仍然想让它工作。
      【解决方案4】:

      我最初在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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        相关资源
        最近更新 更多