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.

Culebrón
la source

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

Calvin Cheng
la source
35

Il y a une py-autoreload=Noption dans les nouvelles versions. Il suffit de régler Nla fréquence (en secondes) des vérifications (3 est une bonne valeur).

roberto
la source
12
"utiliser seulement dans le développement" selon uwsgi docs
scytale
4
ressemble à touch-reload = / some / file est une option plus sûre
Scytale
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

BorisHajduk
la source
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.

mrtipale
la source