Не могу вспомнить где, но я читал, что uWSGI может перезагружаться, как сервер разработки Django, при изменении сценария проекта. Я не могу найти это в документы, ни в Интернете. Как я могу это сделать?
Я использую Ubuntu 12.04 на своих рабочих машинах и Debian Squeeze на рабочем и производственном сервере, Django 1.4 и uWSGI 1.2.
Ссылка: http://projects.unbit.it/uwsgi/wiki/Management
Если вы начали uwsgi с --touch-reload=/path/to/special/file/usually/the.ini
вариант, перезагрузка uWSGI - это простой вопрос касания перезагрузки этого файла с помощью
touch /path/to/special/file/usually/the.ini
И если вам нужна возможность «автозагрузки», вот совет, который поможет: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode
Eсть py-autoreload=N
опция в более новых выпусках. Просто установите N
частоте проверок (в секундах) (3 - хорошее значение).
Если вы не хотите терять автоматическую перезагрузку django, зарегистрируйте этот метод перезагрузки (например, в settings.py):
import uwsgi
from uwsgidecorators import timer
from django.utils import autoreload
@timer(3)
def change_code_gracefull_reload(sig):
if autoreload.code_changed():
uwsgi.reload()
Теперь, если вы измените свой код, он будет перезагружен.
Автор: Симоне Федеричи
uwsgi также разрешает перезапуск с помощью kill SIGNAL. Я использую его, как показано ниже:
# ps -efa | grep uwsgi | grep prod
app 13390 13383 0 07:40 ? 00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app 13417 13390 0 07:40 ? 00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
app 13419 13390 0 07:40 ? 00:00:00 /usr/local/bin/uwsgi --ini /etc/uwsgi/apps-enabled/app_prod.ini
# kill -HUP 13390
Если вы запустите ту же команду, вы увидите, что pid дочерних процессов будет изменен, поскольку они повторно созданы мастером. Также проверьте конфигурацию uwsgi на предмет счетчиков процессов master / worker. Этот метод легко интегрировать с ansible или другими инструментами автоматизации, поэтому его легко использовать удаленно.
Это не требует, чтобы ваш исходный процесс запускался с помощью --touch-reload.