¿Cómo hago para que se reinicie uWSGI cuando se modifica un script de Python?


38

No recuerdo dónde, pero leí que uWSGI puede recargarse como el servidor de desarrollo Django cuando se modifica un script de proyecto. No puedo encontrar eso en los documentos , ni en Internet. ¿Cómo puedo hacer esto?

Uso Ubuntu 12.04 en mis máquinas de trabajo y Debian Squeeze en el escenario y el servidor de producción, Django 1.4 y uWSGI 1.2.

Respuestas:




10

Si no desea perder la recarga automática de django, registre este método de recarga (es decir, en 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()

Ahora, si cambia su código, se volverá a cargar.

Autor: Simone Federici


1
Esto funcionó perfectamente. También se agregó un condicional para que esto solo se llame en el entorno de desarrollo.
2upmedia

0

uwsgi también permite reiniciar usando kill SIGNAL. Lo uso de la siguiente manera:

# 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 ejecuta el mismo comando, verá que los procs secundarios se cambiarán a medida que master los vuelva a generar. También verifique la configuración de uwsgi para los recuentos de proceso maestro / trabajador. Este método es fácil de integrar con herramientas de automatización ansible u otras, por lo que es fácil de usar para uso remoto.

Esto no necesita que su proceso original se inicie con --touch-reload.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.