Enfin, j'ai migré mon environnement de développement de runserver vers gunicorn / nginx.
Il serait pratique de répliquer la fonction de chargement automatique de runserver sur gunicorn, de sorte que le serveur redémarre automatiquement lorsque la source change. Sinon, je dois redémarrer le serveur manuellement avec kill -HUP
.
Un moyen d'éviter le redémarrage manuel?
kill -HUP
le processus PID, mais utiliser supervisorctl à la place. Mais ne pensez pas que cela change beaucoup.Réponses:
Bien que ce soit une vieille question, juste pour la cohérence - depuis la version 19.0, gunicorn a l'
--reload
option. Aucun outil tiers n'a donc besoin de plus.la source
killall -HUP procname
fonctionnera bien) pour que les nouveaux travailleurs démarrent et les anciens arrêtent gracieusement.Une option serait d'utiliser les --max-requests pour limiter chaque processus engendré à ne servir qu'une seule requête en ajoutant
--max-requests 1
aux options de démarrage. Chaque processus nouvellement créé devrait voir votre code changer et dans un environnement de développement, le temps de démarrage supplémentaire par demande devrait être négligeable.la source
pip
paquet en mesure,watchdog
.Bryan Helmig a proposé cela et je l'ai modifié pour l'utiliser
run_gunicorn
au lieu de le lancergunicorn
directement, pour permettre de simplement couper et coller ces 3 commandes dans un shell dans le dossier racine de votre projet django (avec votre virtualenv activé):la source
127.0.0.1:80
, si nécessaire.settings.py
,models.py
(migration nécessaire), ou le code source d'une application externe pas dans meswatchmedo
habitudes.J'utilise git push pour déployer en production et configurer des hooks git pour exécuter un script. L'avantage de cette approche est que vous pouvez également effectuer la migration et l'installation du package en même temps. https://mikeeverhart.net/2013/01/using-git-to-deploy-code/
Créez ensuite un script
/home/git/project_name.git/hooks/post-receive
.Assurez-vous de le faire
chmod u+x post-receive
et ajoutez un utilisateur aux sudoers. Autorisez-le à fonctionnersudo supervisorctl
sans mot de passe. https://www.cyberciti.biz/faq/linux-unix-running-sudo-command-without-a-password/Depuis mon serveur local / de développement, j'ai mis en place
git remote
ce qui me permet de pousser vers le serveur de productionEn prime, vous pourrez voir toutes les invites pendant l'exécution du script. Vous verrez donc s'il y a un problème avec la migration / l'installation du package / le redémarrage du superviseur.
la source
#!/bin/bash
comme indiqué ci-dessus au lieu de#!/bin/sh
ce que l'post-receive
exemple Git avait!