Jak zmusić do ponownego uruchomienia uWSGI po zmodyfikowaniu skryptu Python?

38

Nie pamiętam gdzie, ale czytam uWSGI może przeładować się jak serwer programistyczny Django, gdy skrypt projektu jest modyfikowany. Nie mogę tego znaleźć w dokumentach ani w internetach. W jaki sposób mogę to zrobić?

Używam Ubuntu 12.04 na moich działających komputerach i Debian Squeeze na serwerze scenicznym i produkcyjnym, Django 1.4 i uWSGI 1.2.

culebrón
źródło

Odpowiedzi:

35

W py-autoreload=Nnowszych wersjach dostępna jest opcja. Wystarczy ustawić Nczęstotliwość (w sekundach) kontroli (3 to dobra wartość).

roberto
źródło
12
„używaj tylko w rozwoju” według uwsgi docs
scytale
4
wygląda na to, że touch-reload = / some / file jest bezpieczniejszą opcją
scytale 28.01.2013
10

Jeśli nie chcesz stracić automatycznego przeładowania django, zarejestruj tę metodę przeładowania (np .: w 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()

Teraz, jeśli zmienisz kod, zostanie on ponownie załadowany.

Autor: Simone Federici

BorisHajduk
źródło
1
To działało idealnie. Dodano również warunek, który jest wywoływany tylko w środowisku programistycznym.
2upmedia,
0

uwsgi pozwalają również na restart przy użyciu kill SIGNAL. Używam go jak poniżej:

# 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

Jeśli uruchomisz tę samą komendę, zobaczysz, że proces PID dziecka zostanie zmieniony, ponieważ są one odradzane przez master. Sprawdź także konfigurację uwsgi dla liczników proc / master. Ta metoda jest łatwa do zintegrowania z ansible lub innymi narzędziami do automatyzacji, więc można ją łatwo używać zdalnie.

Nie wymaga to uruchamiania oryginalnego proc z opcją --touch-reload.

mrtipale
źródło