Як змусити перезапустити uWSGI, коли скрипт Python буде змінено?


38

Не можу згадати куди, але я читаю, що uWSGI може перезавантажити себе як сервер розробки Django, коли сценарій проекту буде змінено. Я не можу цього знайти в документах , ні в інтернетах. Як я можу це зробити?

Я використовую Ubuntu 12.04 на своїх робочих машинах і Debian Squeeze на сценічному та виробничому сервері, Django 1.4 та uWSGI 1.2.

Відповіді:


39

Довідка: http://projects.unbit.it/uwsgi/wiki/Management

Якщо ви запустили uwsgi з --touch-reload=/path/to/special/file/usually/the.iniможливістю, перезавантажити uWSGI - це проста проблема сенсорного перезавантаження цього файлу за допомогою

touch /path/to/special/file/usually/the.ini

І якщо ви хочете отримати можливість автоматичного завантаження, це підказка, яка виконує це: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode



10

Якщо ви не хочете втратити автоматичне завантаження django, зареєструйте цей метод перезавантаження (тобто: у 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()

Тепер, якщо ви зміните свій код, він буде перезавантажений.

Автор: Сімоне Федерічі


1
Це спрацювало чудово. Також додано умовне, так що це викликається лише в середовищі розробки.
2upmedia

0

uwsgi також дозволяють перезапустити, використовуючи kill SIGNAL. Я використовую його як нижче:

# 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

Якщо ви виконаєте одну і ту ж команду, ви побачите, що підручні програми pid будуть змінені під час їх повторного породження майстром. Також перевірте конфігурацію uwsgi для рахунків майстра / працівника. Цей метод легко інтегрувати з ансибільними або іншими інструментами автоматизації, тому легко віддалений для використання.

Для цього не потрібно запускати оригінальну процедуру з --touch-reload.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.