Comment faire redémarrer uWSGI lorsqu'un script Python est modifié?


38

Je ne me souviens plus où, mais je lis uWSGI peut se recharger lui-même comme un serveur de développement Django lorsqu'un script de projet est modifié. Je ne trouve pas cela dans la documentation , ni dans les internets. Comment puis-je faire ceci?

J'utilise Ubuntu 12.04 sur mes machines en fonctionnement et Debian Squeeze sur un serveur de scène et de production, Django 1.4 et uWSGI 1.2.

Réponses:


39

Référence: http://projects.unbit.it/uwsgi/wiki/Management

Si vous avez lancé uwsgi avec cette --touch-reload=/path/to/special/file/usually/the.inioption, le rechargement de votre uWSGI est une simple question de rechargement tactile de ce fichier avec

touch /path/to/special/file/usually/the.ini

Et si vous voulez la fonctionnalité "autoreload", voici le conseil qui vous aidera à faire cela: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode



10

Si vous ne voulez pas perdre le chargement automatique de Django, 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 modifiez votre code, il sera rechargé.

Auteur: Simone Federici


1
Cela a fonctionné parfaitement. Également ajouté un conditionnel pour qu'il ne soit appelé que dans l'environnement de développement.
2upmedia

0

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 le pid de procs enfant sera modifié à mesure qu’il est reproduit par le maître. Vérifiez également uwsgi config pour le nombre de processus maître / travailleur. Cette méthode est facile à intégrer avec Ansible ou d’autres outils d’automatisation, elle est donc facile à utiliser pour une utilisation à distance.

Cela n'a pas besoin que votre proc d'origine soit démarrée avec --touch-reload.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.