Django на Dreamhost with Passenger: нет ответа браузерам, нет ошибок - PullRequest
4 голосов
/ 23 ноября 2010

Я пытаюсь запустить какой-нибудь тривиальный Django на моем аккаунте. Я сделал домашнее задание, прежде чем выбрать Dreamhost, но только недавно решил попробовать Django.

Как бы то ни было, у меня есть тривиальное приложение, которое я хочу запустить под чем-то.mydomain.com. Пассажир включен.

Когда я захожу на статическую страницу, она нормально загружается из ~ / some.mydomain.com / public /. Когда я захожу на любую другую страницу (например, что-то.mydomain.com/admin), URL должен обрабатываться моим приложением Django.

Вот где я застреваю; страница не загружается и не выдает ошибку . Он пытается загрузить навсегда (пока нет времени ожидания). Я не знаю много о журналах; Я ничего не нашел сам.

Мне кажется, что passenger_wsgi.py в ~ / some.mydomain.com / неисправен. Я пробовал разные версии.

Этот пассажир дает ... заморозить? описано выше

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:

>>> import django

и это не дало ошибок.

Что теперь?

Ответы [ 4 ]

1 голос
/ 07 июня 2011

Мне удалось получить хорошую настройку отладки для приложения WSGI, используя модуль Werkzeug . Я думаю, что это также может быть интегрировано с Django.

Во-первых, я предполагаю, что вы настроили свой python virtualenv в своем домашнем каталоге под ~/env и активны.

Во-вторых, установите функции werkzeug-debugger-appengine для исправления отладчика werkzeug .

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

1 голос
/ 23 ноября 2010

Я отказался от использования Django на Dreamhost, потому что их сервер принудительно убивал любой процесс wsgi по времени.После этого новый запрос должен запустить новый экземпляр, что в моем случае означало, что запросы иногда занимали 10-15 секунд.Большинству людей было более чем достаточно времени, чтобы предположить, что сайт закрыт и сдаться.

Это может быть не вашей конкретной проблемой, но я ожидаю, что вы не будете счастливы, даже если вы делаете заставить ваш сайт работать.

0 голосов
/ 11 марта 2011

У меня был ряд проблем, подобных этому на 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()
0 голосов
/ 24 ноября 2010

Я согласен с Беном и Крисом в том, что разделенный DH DH env определенно не подходит для обслуживания более крупных проектов. Afaik, однако, время ожидания основано на последней загрузке, поэтому, если у вас стабильный поток, ваше приложение должно - в теории! - работать нормально. :)

В любом случае, я пользуюсь услугами Пассажира DH для подтверждения концепции, и она хорошо обслуживается по очень хорошей цене.

О вашей проблеме - Пассажир хорошо справляется с поиском и анализом ошибок Rails, но экспериментальная реализация WSGI, которую вы используете для Django, умирает, когда возникает исключение. Обходной путь - запустить промежуточное программное обеспечение, которое улавливает ошибку и передает ее приятно обработанной в Passenger.

Подробнее читайте и пример: http://wiki.dreamhost.com/Passenger_WSGI#500_Errors_with_Passenger_WSGI_Workaround

...