Je ne me souviens pas où, mais j'ai lu que uWSGI peut se recharger comme Django serveur de développement lorsqu'un script de projet est modifié. Je ne le trouve pas dans les docs , ni dans les internets. Comment faire?
J'utilise Ubuntu 12.04 sur mes machines de travail et Debian Squeeze sur scène et serveur de production, Django 1.4 et uWSGI 1.2.
Référence: http://projects.unbit.it/uwsgi/wiki/Management
Si vous avez démarré uwsgi avec le --touch-reload=/path/to/special/file/usually/the.ini
option, recharger votre uWSGI est une simple question de recharger ce fichier avec
touch /path/to/special/file/usually/the.ini
Et si vous voulez la capacité de "chargement automatique", voici l'astuce qui permet de le faire: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode
Il y a un py-autoreload=N
option dans les versions les plus récentes. Réglez simplement N
sur la fréquence (en secondes) des vérifications (3 est une bonne valeur).
Si vous ne voulez pas perdre le Django autoreload, enregistrez cette méthode de rechargement (c'est-à-dire: dans 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()
Maintenant, si vous changez votre code, il sera rechargé.
Auteur: Simone Federici
uwsgi permet également de redémarrer en utilisant kill SIGNAL. Je l'utilise comme ci-dessous:
# 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
Si vous exécutez la même commande, vous verrez que les procs enfants pid seront modifiés à mesure qu'ils sont régénérés par le maître. Vérifiez également la configuration uwsgi pour les nombres de proc de maître/travailleur. Cette méthode est facile à intégrer avec ansible ou d'autres outils d'automatisation, donc facile à utiliser à distance.
Cela ne nécessite pas que votre proc d'origine soit démarré avec --touch-reload.