21

node.jsを使用してJavaScriptで作成しているWebアプリ。Foremanを使用していますが、コードを変更するたびにサーバーを手動で再起動したくありません。nodeHTTPリクエストを処理する前に(つまり、プロセスを再開する前に)Webアプリ全体をリロードするようにForemanに指示できますか?

4

6 に答える 6

23

Pendlepants ソリューションの調整バージョンを次に示します。Foreman は、環境変数を読み取るために .env ファイルを探します。ラッパーを追加するのではなく、Foreman が起動に使用するコマンドを切り替えるだけです。

.env:

WEB=node app.js

dev.env:

WEB=supervisor app.js

あなたのプロファイルで:

web: $WEB

デフォルトでは、Foreman は .env (本番環境) から読み込みますが、DEV ではこれを実行するだけです:

foreman start -e dev.env
于 2012-04-05T22:30:41.460 に答える
7

この目的のために再実行を使用できます

これには 2 つのコマンドだけを実装できます。

  1. gem インストールの再実行
  2. フォアマンスタートを再実行する

その後、再実行すると、ファイルが変更された後にプロセスが自動的に再起動されます。

于 2012-03-29T14:35:19.813 に答える
6

nodemonを使用すると 、次のことができます

nodemon --exec "foreman start"
于 2015-05-12T20:55:10.057 に答える
3

問題は Foreman ではなく、ノードが新しいリクエストでコードをリロードしない方法にあります。解決策は、スーパーバイザーのような npm パッケージを Foreman の環境ラッパーと共に使用することです。

まず、スーパーバイザーをインストールします。

npm install -g supervisor

次に、Foreman が呼び出すことができるラッパー シェル スクリプトを作成します。

if [ "$NODE_ENV" == "production" ]; then
  node /path/to/app.js
else
  supervisor /path/to/app.js
fi

実行して、ラッパースクリプトのアクセス許可を実行可能に設定しますchmod a+x /path/to/wrapper_script.sh

最後に、ラッパー スクリプトを使用するように foreman を更新します。だからあなたのProcfile

web: /path/to/wrapper_script.sh

これで、Foreman を実行し、ノード アプリが運用環境で実行されていない場合、要求ごとに再読み込みする必要があります。

于 2012-02-08T18:38:58.947 に答える
2

元の質問に対するPeter Ehrlichのコメントは、それ自体が答えになるに値すると思います。local/dev 用の別の Procfile が間違いなく最適なソリューションだと思います: https://stackoverflow.com/a/10790514/133720

于 2013-11-14T21:43:59.160 に答える