私はたぶんコード変更をGitにプッシュするdevサーバを持っています。一度押すたびに、手動でサーバーにログインしてスーパーバイザプロセスを再起動する必要があります。スーパーバイザプロセスを自動的にリロードする方法はありますか?
スーパーバイザに変更のファイルシステムディレクトリを監視させ、プロセスの変更をリロードする方法はありますか?
私はたぶんコード変更をGitにプッシュするdevサーバを持っています。一度押すたびに、手動でサーバーにログインしてスーパーバイザプロセスを再起動する必要があります。スーパーバイザプロセスを自動的にリロードする方法はありますか?
スーパーバイザに変更のファイルシステムディレクトリを監視させ、プロセスの変更をリロードする方法はありますか?
ファイルシステムを監視するEvent Listener(おそらくwatchdog)を使用して、XML-RPC APIを使用して再起動する必要があります。インスピレーションのためsuperlanceパッケージのmemmon
リスナーをご覧ください。それは複雑である必要はありません。ウォッチドッグが再起動ルーチンを呼び出すので、childutils.listener.wait
を使用してイベントを読み取る必要はありません。
また、supervisord API(ソケットのアクセス許可、HTTPパスワード)にアクセス権がある場合は、git hookがこのトリックを行う可能性があります。より簡単で安全性の低いアプローチです。
さらに簡単で安全性の低いアプローチは、supervisorctl restart
を発行できるようにすることです。実行中のユーザーは、プッシュユーザー(またはgit、またはwwwの設定方法に応じて)と一致する必要があります。それはセキュリティに賢明に間違っています。しかし、開発のために、うまくいくかもしれません。
関連:
私は自分の作ってみましたので、私はまた、任意の解決策を見つけることができませんでした。 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>
socket
がsupervisorctl
からソケットですprogram
はプログラム名で[program:<name>]
セクション定義です。 --username
と--password
もあります。これは、カスタムスーパーバイザ設定がある場合に使用できます。
スーパーバイザーを使用する解決策ではありませんが、私は通常、監視対象アプリ内でこの問題を解決します。たとえば、gunreornに--reloadフラグを追加すると、アプリが変更されるたびにリロードされます。
これは実際のソリューションではなく、「ソリューションの作成方法」のようなものです。だから、今は3年近く経っていますが、私は非常に一般的な問題と思われるものにはまだ実際の解決策はありませんか? – hackel