Django на Dreamhost с Passenger: нет ответа браузерам, нет ошибок

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

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

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

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

Я предполагаю, что пассажир_wsgi.py в ~ / something.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

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

Что теперь?


person Joel    schedule 23.11.2010    source источник


Ответы (4)


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

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

person Ben Jackson    schedule 23.11.2010
comment
Лично я работаю с WebFaction и считаю их отличными, в том числе и с Django. Если вы ищете другой хост, который будет хорошо работать с Django и WSGI, WebFaction будет одним из них. - person Chris Morgan; 23.11.2010
comment
Я так понимаю, но я заплатил за Dreamhost. - person Joel; 23.11.2010

Мне удалось получить хорошую настройку отладки для приложения 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

person cmcginty    schedule 07.06.2011

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

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

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

Дополнительные сведения и пример см. В статье http://wiki.dreamhost.com/Passenger_WSGI#500_Errors_with_Passenger_WSGI_Workaround

person anthon    schedule 24.11.2010
comment
Спасибо за дальнейшие объяснения. Я попробую промежуточное ПО и доложу. Я серьезно подумываю о том, чтобы перейти на линод, но, тем не менее, мне бы хотелось, чтобы это работало. - person Joel; 28.11.2010

Первоначально у меня был ряд проблем, подобных этой, на 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()
person totels    schedule 10.03.2011