Come faccio a riavviare uWSGI quando viene modificato uno script Python?


38

Non ricordo dove, ma ho letto uSGI può ricaricarsi come il server di sviluppo Django quando viene modificato uno script di progetto. Non lo trovo nei documenti , né negli internet. Come posso fare questo?

Uso Ubuntu 12.04 sulle mie macchine funzionanti e Debian Squeeze sul palco e sul server di produzione, Django 1.4 e uWSGI 1.2.

Risposte:




10

Se non vuoi perdere il caricamento automatico di django, registra questo metodo di ricarica (es .: in 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()

Ora se si modifica il codice verrà ricaricato.

Autore: Simone Federici


1
Questo ha funzionato perfettamente. Inoltre è stato aggiunto un condizionale in modo che venga chiamato solo nell'ambiente di sviluppo.
2

0

uwsgi permette anche il riavvio usando kill SIGNAL. Lo uso come di seguito:

# 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

Se esegui lo stesso comando, vedrai che i processi secondari pid verranno modificati man mano che vengono rigenerati dal master. Controlla anche la configurazione di uwsgi per i conteggi dei proc master / worker. Questo metodo è facile da integrare con ansible o altri strumenti di automazione, quindi è facile da usare in remoto.

Questo non ha bisogno del tuo proc originale per iniziare con --touch-reload.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.