web-dev-qa-db-ja.com

Pythonスクリプトが変更されたときにuWSGIを再起動するにはどうすればよいですか?

どこにあるか思い出せませんが、uWSGIはDjango開発サーバーがプロジェクトスクリプトが変更されたときに開発サーバーにリロードできます。 the docs でそれを見つけることができません。また、インターネットではどうすればよいですか?

私は稼働中のマシンでUbuntu 12.04を使用し、ステージおよび本番サーバーでDjango 1.4およびuWSGI 1.2でDebian Squeezeを使用しています。

39
culebrón

参照: http://projects.unbit.it/uwsgi/wiki/Management

--touch-reload=/path/to/special/file/usually/the.iniオプションを使用してuwsgiを開始した場合、uWSGIのリロードは、そのファイルをタッチするだけで簡単にリロードできます。

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

そして、「autoreload」機能が必要な場合は、これを実現するためのヒントです: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks#uWSGIdjangoautoreloadmode

39
Calvin Cheng

py-autoreload=N新しいリリースのオプション。 Nをチェックの頻度(秒単位)に設定するだけです(3が適切な値です)。

38
roberto

Django autoreloadを失いたくない場合は、このreloadメソッドを登録します(つまり、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()

コードを変更すると、再読み込みされます。

作成者:Simone Federici

10
BorisHajduk

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

同じコマンドを実行すると、マスターによって再生成されるときに子proc pidが変更されることがわかります。また、uwsgi configでマスター/ワーカープロシージャカウントを確認してください。この方法はansibleまたは他の自動化ツールと簡単に統合できるため、リモートでの使用が容易になります。

これは、-touch-reloadで開始する元のプロシージャを必要としません。

0
mrtipale