我正试图让一些琐碎的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
并没有错误。
现在怎么办?
答案 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
现在,当你遇到异常时,你会得到一个如下所示的页面:
答案 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()