2015年4月5日日曜日

Python ファイルが更新されたら uWSGI サービスを自動的にリロード

uWSGI で動く Python アプリを開発しているのですが、開発中に Python ファイルを更新する度に uWSGI サービスをリロードするのは手間がかかります。そこで、Python ファイルが更新されたら uWSGI サービスを自動的にリロードするようにしてみました。

環境
Ubuntu 14.04 (Trusty Tahr) Server

まず、uWSGI Python アプリのファイル名を WsgiApp.py とします。

WsgiApp.py を監視し、更新されたら uWSGI をリロードするモジュール mFileMon.py を作成

$ cat mFileMon.py
#!/usr/bin/env python3

import uwsgi
from uwsgidecorators import filemon

filemon('/some/where/WsgiApp.py')(uwsgi.reload)

mFileMon.py はモジュール検索パスが通っているどこか適当な場所に設置します。

uWSGI の WsgiApp 設定ファイルで、import に mFileMon を指定します。

$ cat /etc/uwsgi/apps-available/WsgiApp.ini
[uwsgi]
plugins = python3
pythonpath = /some/where
module  = WsgiApp
import = mFileMon

念のため、uWSGI をリスタートします。

$ sudo service uwsgi restart

以降は WsgiApp.py が更新されると uWSGI サービスが自動でリロードされます。

なお、mFileMon.py で filemon() に渡しているパスを以下のようにすると /some/where/ ディレクトリを監視し、このディレクトリに設置されたどんなファイルが更新されても uWSGI サービスをリロードするようにできるようです。

$ cat mFileMon.py
#!/usr/bin/env python3

import uwsgi
from uwsgidecorators import filemon

filemon('/some/where')(uwsgi.reload)

参考


0 件のコメント:

コメントを投稿