Gunicorn не перезагружает приложение Django - PullRequest
12 голосов
/ 22 апреля 2011

Я получаю непоследовательное поведение при перезагрузке кода с приложением Django 1.3 и gunicorn 0.12.1, работающим внутри virtualenv.

Gunicorn не перезагружает мое приложение должным образом, даже при перезапуске определенногоGunicorn процесс PID.Когда я запускаю базовый runserver (через Django, через команду manage.py), это не проблема.

Когда я удаляю и воссоздаю свой virtualenv, gunicorn работает, как и ожидалось, с новым кодом.

Есть ли кэш Python или что-то еще?Я также пытался удалить все *.pyc файлы.

Ответы [ 2 ]

6 голосов
/ 28 апреля 2011

Попробуйте это:

$ kill -HUP masterpid

Также обратите внимание на некоторые заметки внизу следующего поста .

4 голосов
/ 22 мая 2012

Я также столкнулся с вариантами этой проблемы - как было рекомендовано в статье, на которую ссылается г-н Покоми, убийство мастер-процесса gunicorn с помощью сигнала HUP, похоже, помогает.

Oneможет легко настроить автоматическую перезагрузку при сохранении файла, если вы используете модуль python watchdog;настройка на самом деле не требует пояснений, поэтому вот фрагмент из моего файла supervisord.conf для разработки:

[program:ost2]
autostart=true
command=/usr/local/share/python/gunicorn --debug\
-c /Users/fish/Dropbox/ost2/ost2/utils/gunicorn/ost2-debug.py wsgi_debug
directory=/Users/fish/Dropbox/ost2/ost2
priority=500
; (etc)

[program:ost2-reloader]
autostart=true
autorestart=false
directory=/tmp
command=/usr/local/share/python/watchmedo shell-command\ 
--patterns="*.py;*.txt;*.html;*.css;*.less;*.js;*.coffee"\
-R --command='kill -HUP $(cat /usr/local/gunicorn/gunicorn.pid)'\
/Users/fish/Dropbox/ost2/ost2/
priority=996
; (etc)

(NB. Я поставил косые черты в этом примере перед символами новой строки, которых на самом деле нет в файле conf- Я добавил эти новые строки для удобочитаемости; я не уверен, что это работает IRL)

Первая программа - это процесс gunicorn, который я запускаю в одном потоке во время разработки, чтобы использовать отладчик Werkzeug.Вторая часть интересна: эта команда говорит: «завершать процесс, указанный в PID-файле gunicorn, всякий раз, когда в этом дереве каталогов происходит изменение, если суффикс файла совпадает с суффиксом этого списка».

Работает как очарование для многих, включая меня.Если вы этого не знаете, watchdog очень полезен и стоит посмотреть сам по себе.

...