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.

culebrón
fonte

Respostas:

35

Há uma py-autoreload=Nopção em versões mais recentes. Basta definir Na frequência (em segundos) das verificações (3 é um bom valor).

roberto
fonte
12
"O uso somente em desenvolvimento" de acordo com docs uwsgi
scytale
4
parece touch-reload = / some / file é uma opção mais segura
scytale 28/01
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

BorisHajduk
fonte
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.

mrtipale
fonte