gunicorn, не полностью перезагружающий после Сигнала HUP

Я пытаюсь получить работу supervisor/gunicorn/django установка на бродяге. Я использую сторожевой таймер Python, чтобы попытаться перезапустить gunicorn, когда изменения кода происходят.

Я использую следующую конфигурацию супервизора для gunicorn:

[program:someapp]
environment=PYTHONPATH='/vagrant/libs/unmodified/django-error-capture-middleware/src:/vagrant:/home/vagrant/.virtualenvs/someapp/lib/python2.7/site-packages:/vagrant/wsgi',DJANGO_SETTINGS_MODULE=someapp.settings.vagrant
command=/home/vagrant/.virtualenvs/someapp/bin/gunicorn --bind 0.0.0.0:80 --pid=/home/vagrant/.gunicorn.pid --preload --workers=1 --debug --log-level debug --error-logfile - --access-logfile - vagrant_wsgi:application
user=root
group=root
redirect_stderr=true
stdout_logfile = /vagrant/logs/gunicorn.log
stderr_logfile = /vagrant/logs/gunicorn.log
stdout_logfile_maxbytes=0
autostart=true
autorestart=true
stdout_events_enabled=true
loglevel=debug

Это все работает просто великолепно. Сторожевой таймер также хорошо работает. Однако, когда я использую сторожевой таймер для выполнения a kill -HUP [pidofgunicorn], иногда это не будет на самом деле перезагружать полностью. Иногда django будет даже сообщать, что модули отсутствуют, когда они были ранее там прежде (я не изменил sys.path вообще).

Если я использую сторожевой таймер для выполнения a supervisorctl restart someapp, это хорошо работает. Однако это берет намного дольше, особенно на virtualbox экземпляре.

Есть ли что-то, что я могу сделать, чтобы заставить gunicorn перезагружать корректно, и на самом деле видеть изменения, которые были внесены?

7
задан 11 December 2014 в 20:02
1 ответ

Проблема заключается в параметре --preload.

Первое решение состоит в том, чтобы не использовать --preload.

Второй ] решение состоит в следующем:

# Reload a new master with new workers
kill -s USR2 $PID
# Graceful stop old workers
kill -s WINCH $OLDPID
# Graceful stop old master
kill -s QUIT $OLDPID

Третье решение - использовать пакет https://github.com/flupke/rainbow-saddle , который хорошо работает с супервизором. 1158282]

9
ответ дан 2 December 2019 в 23:33

Теги

Похожие вопросы