2013-11-26 30 views
6

私はたぶんコード変更をGitにプッシュするdevサーバを持っています。一度押すたびに、手動でサーバーにログインしてスーパーバイザプロセスを再起動する必要があります。スーパーバイザプロセスを自動的にリロードする方法はありますか?

スーパーバイザに変更のファイルシステムディレクトリを監視させ、プロセスの変更をリロードする方法はありますか?

答えて

5

ファイルシステムを監視するEvent Listener(おそらくwatchdog)を使用して、XML-RPC APIを使用して再起動する必要があります。インスピレーションのためsuperlanceパッケージのmemmonリスナーをご覧ください。それは複雑である必要はありません。ウォッチドッグが再起動ルーチンを呼び出すので、childutils.listener.waitを使用してイベントを読み取る必要はありません。

また、supervisord API(ソケットのアクセス許可、HTTPパスワード)にアクセス権がある場合は、git hookがこのトリックを行う可能性があります。より簡単で安全性の低いアプローチです。

さらに簡単で安全性の低いアプローチは、supervisorctl restartを発行できるようにすることです。実行中のユーザーは、プッシュユーザー(またはgit、またはwwwの設定方法に応じて)と一致する必要があります。それはセキュリティに賢明に間違っています。しかし、開発のために、うまくいくかもしれません。

関連:

+6

これは実際のソリューションではなく、「ソリューションの作成方法」のようなものです。だから、今は3年近く経っていますが、私は非常に一般的な問題と思われるものにはまだ実際の解決策はありませんか? – hackel

5

私は自分の作ってみましたので、私はまた、任意の解決策を見つけることができませんでした。 Here it is

あなたは、このコマンドでパッケージをインストールすることができます。

pip install git+https://github.com/stavinsky/supervisord-touch-reload.git 

(私はいくつかのテストを追加した後は、PyPIに追加されます。)

githubのにexamplesフォルダにあるスーパーバイザーの設定例を。ドキュメントはすぐに公開されると私は信じている。あなたが使用を開始する必要が 基本的にすべてこのモジュールは以下のようにcommandでイベントリスナーを追加している:、

fileは絶対または directoryパスからの相対で監視されるファイルです

python -m touch_reload --socket unix:///tmp/supervisor.sock --file <path/to file file> --program <program name>

socketsupervisorctlからソケットですprogramはプログラム名で[program:<name>]セクション定義です。 --username--passwordもあります。これは、カスタムスーパーバイザ設定がある場合に使用できます。

+1

これを公開していただきありがとうございます。うまくいくと思う。確かに奇妙なことに、このようなことをするための組み込みのソリューションはありません。 – edwardmp

+0

ようこそ。それが誰かにとって有益だったことを知ってうれしい。何か問題やアイデアがある場合は改善する方法このスクリプトを作成する方がいいよ – Stavinsky

+0

このソリューションは一度に1つのファイルのみを監視しますか? https://github.com/gorakhargosh/watchdogではディレクトリ全体を見ることができます。 –

1

スーパーバイザーを使用する解決策ではありませんが、私は通常、監視対象アプリ内でこの問題を解決します。たとえば、gunreornに--reloadフラグを追加すると、アプリが変更されるたびにリロードされます。

関連する問題