3

以前にこれを達成するために Git を使用したことがありますが、別のプロジェクトでは Mercurial が必要です。私の Git レシピにはpost-receive hook、次のような a が含まれていました。

#!/bin/sh
GIT_WORK_TREE=/home/ec2-user/www
export GIT_WORK_TREE
git checkout -f

サーバー上のリモートリポジトリにプッシュするたびに、作業中のアプリディレクトリが更新されます。次に、 node-supervisor :を使用してアプリを実行しますsupervisor server.js。これにより、ファイルの変更が監視され、git push / ファイルの変更後に Node が再起動されます。

私の質問は、Mercurial でこれを達成する最善の方法は何かということです。同様の代替手段としてフックを調べましたが、changegroupフックの例が見つかりません。ありがとう!


更新:私の実装

以下の回答とコメントに従って、changegroupフックを使用しました。具体的には、myrepo/.hg/hgrc私が使用した:

[hooks]
changegroup = hg update && /path/to/restart/script.sh

このプロジェクトでは、基本的なシェル スクリプトを使用してノードを再起動するか、上記のノード スーパーバイザーをインストールします。次のようになります。

#!/bin/sh
echo "Restarting Server" >> /logpath/server.log
sudo pkill -x node
sudo node server.js >> /logpath/server.log &
echo "Changegroup Hook Executed, Server Restarted"
exit 0

実行中の Node プロセスは 1 つだけなので、pkill (all) が機能します。また、repo ディレクトリから直接 server.js を実行しています。

4

1 に答える 1

2

RedBeanの本のフックの部分を試してみてください。特に、フック参照部分まで下にスクロールすると便利な場合があります。例:

changegroup-リモートチェンジセットが追加された後

于 2012-03-12T00:19:18.630 に答える