帆はセイルアプリは(sails.lift()
またはsails.lower()
経由)プログラムによって起動された可能性がありますので、それが低下するとprocess.exit
を呼び出すことはありませんし、このようにプロセスを終了することも同様帆と呼ばれることにスクリプトを終了します。
実際、ノードスクリプトはイベントループに何も残っていないときに自動的に終了するはずです。あなたはsails new
で新しい帆アプリを作成し、同様にそのディレクトリにテストスクリプトを作成することで、この自分自身を確認することができます。
/* testscript.js */
var Sails = require('sails');
Sails.load({hooks: {grunt: false, views: false}}, function(err) {
console.log('lifted sails!');
Sails.lower(function(err) {
console.log('lowered sails!');
});
});
コマンドラインでnode testscript.js
を行うと、あなたは2件のログが表示されますし、コマンドプロンプト
これは、アプリがでない場合、が低下していることを実証するためのものです。最も可能性の高いものはデータベースアダプタです。いくつかのアダプタ(Postgresのようなもの)はしばらくの間TCP接続を維持します。 30秒ほど待つと、プロセスが自動的に終了することがあります。 30秒が長すぎて待つことができず、がでない場合は、セイルをプログラムで呼び出す場合は、確かにprocess.exit
に電話することができます。あなたはlower
イベントを待機した後、帆を最初にクリーンアップするために少しの時間を与えることができます:
sails.on('lower', function() {
// Give Sails five seconds to shut down before pulling the plug.
setTimeout(
function() { process.exit(1); },
5000
);
});
あなたconfig/bootstrap.js
にそれを入れて、あなたが行くように良いことがあります。
あなたのプロセスに実際に何が掛かっているのかを確認し、すぐに終了しないようにするには、優秀なwhy-is-node-runningモジュールを試してみてください。
注:この投稿の時点で、lower
イベントが誤ってlowered
としてSailsjs.comに記載されています。これはできるだけ早く修正されます。
sgress454 @リプライのための多くのおかげで、これは多くの意味になります。私は実際に私が必要としていることを達成するためにフックを書いていましたが、基本的にあなたが提案したものですが、ORMフックが失敗している(DBがオフラインの場合など)、bootstrap.jsコードは実行されません。 – dandanknight