Наконец, я перенес свою среду разработки с сервера запуска на gunicorn / nginx.
Было бы удобно реплицировать функцию автоматической перезагрузки runserver на gunicorn, чтобы сервер автоматически перезагружался при изменении источника. В противном случае мне придется перезапустить сервер вручную с помощью kill -HUP
.
Есть ли способ избежать перезапуска вручную?
kill -HUP
стал обрабатывать PID, а вместо этого использовал supervisorctl. Однако не думайте, что это сильно изменится.Ответы:
Хотя это старый вопрос, просто для единообразия - начиная с версии 19.0 Gunicorn есть
--reload
опция. Таким образом, сторонние инструменты больше не нужны.источник
killall -HUP procname
будет нормально работать), чтобы новые рабочие были запущены, а старые корректно закрылись.Одним из вариантов было бы использовать --max-requests, чтобы ограничить каждый порожденный процесс обслуживанием только одного запроса, добавив
--max-requests 1
к параметрам запуска. Каждый новый порожденный процесс должен видеть изменения вашего кода, а в среде разработки дополнительное время запуска для каждого запроса должно быть незначительным.источник
pip
пакета способностей,watchdog
.Брайан Хельмиг придумал это, и я изменил его, чтобы использовать
run_gunicorn
вместоgunicorn
прямого запуска , чтобы можно было просто вырезать и вставить эти 3 команды в оболочку в корневой папке вашего проекта django (с активированным виртуальным окружением):источник
127.0.0.1:80
, если необходимо.settings.py
,models.py
(требуется миграция), или исходный код какого - либо внешнее приложения не в моихwatchmedo
моделях.Я использую git push для развертывания в производственной среде и настраиваю перехватчики git для запуска скрипта. Преимущество этого подхода в том, что вы также можете выполнять миграцию и установку пакета одновременно. https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
Затем создайте сценарий
/home/git/project_name.git/hooks/post-receive
.Обязательно
chmod u+x post-receive
добавьте пользователя в sudoers. Разрешить запускsudo supervisorctl
без пароля. https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/Я настроил свой локальный сервер / сервер разработки,
git remote
который позволяет мне отправлять на рабочий серверВ качестве бонуса вы увидите все запросы во время выполнения скрипта. Так вы увидите, есть ли проблемы с миграцией / установкой пакета / перезапуском супервизора.
источник
#!/bin/bash
как указано выше, вместо того,#!/bin/sh
что было вpost-receive
примере Git !