Como faço para reiniciar o uWSGI quando um script Python é modificado?


38

Não me lembro onde, mas li que o uWSGI pode se recarregar como o servidor de desenvolvimento Django quando um script de projeto é modificado. Não consigo encontrar isso nos documentos , nem nas internets. Como posso fazer isso?

Eu uso o Ubuntu 12.04 nas minhas máquinas de trabalho e o Debian Squeeze no servidor de palco e produção, Django 1.4 e uWSGI 1.2.

Respostas:




10

Se você não quiser perder o carregamento automático do django, registre este método de recarregamento (ou seja: em 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()

Agora, se você alterar seu código, ele será recarregado.

Autor: Simone Federici


1
Isso funcionou perfeitamente. Também foi adicionada uma condicional para que isso seja chamado apenas no ambiente de desenvolvimento.
2upmedia 23/09/2015

0

O uwsgi também permite reiniciar usando kill SIGNAL. Eu o uso como abaixo:

# 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 você executar o mesmo comando, verá que os procs filhos pid serão alterados à medida que são gerados novamente pelo mestre. Verifique também a configuração do uwsgi para as contagens de processos mestre / trabalhador. Esse método é fácil de integrar com ferramentas de automação ansible ou outras, facilitando o uso remoto.

Isso não precisa que seu processo original seja iniciado com --touch-reload.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.