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.

Odpowiedzi:




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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.