何時間もデバッグした後、私はついに私のWebアプリがWindowsでクラッシュする理由を特定しました。NPMの依存関係は、でメッセージをログに記録することがあります。これは、 Foreman + Nodemonコンボconsole.error
を実行している場合、OSXとWindowsで異なる動作をするようです。
たぶん、これらのツールの知識が豊富な人が、これに光を当てるのに役立つでしょうか?これを説明する簡単なアプリは次のとおりです。
app.js
console.log('1');
console.error('2');
console.log('3');
実行nodemon --exec node app.js
はOSXとWindows7の両方で正常に機能し、期待される出力が得られます。
18 Feb 23:56:25 - [nodemon] v0.6.23
18 Feb 23:56:26 - [nodemon] watching: C:\project
18 Feb 23:56:26 - [nodemon] starting `node app.js`
1
2
3
18 Feb 23:56:26 - [nodemon] clean exit - waiting for changes before restart
ここで、ForemanとProcfileを使用して呼び出しをラップすると、次のようになります。
# Procfile
app: nodemon --exec node app.js
OSXの場合:
> foreman start
23:59:12 app.1 | started with pid 69229
23:59:12 app.1 | 18 Feb 23:59:12 - [nodemon] v0.7.2
23:59:12 app.1 | 18 Feb 23:59:12 - [nodemon] watching: /project
23:59:12 app.1 | 18 Feb 23:59:12 - [nodemon] starting `node app.js`
23:59:12 app.1 | 1
23:59:12 app.1 | 2
23:59:12 app.1 | 3
23:59:12 app.1 | 18 Feb 23:59:12 - [nodemon] clean exit - waiting for changes before restart
Windowsの場合:
> foreman start
23:59:40 app.1 | started with pid 2624
23:59:40 app.1 | 18 Feb 23:59:40 - [nodemon] v0.7.2
23:59:40 app.1 | 18 Feb 23:59:40 - [nodemon] watching: C:\project
23:59:40 app.1 | 18 Feb 23:59:40 - [nodemon] starting `node app.js`
23:59:40 app.1 | 1
23:59:40 app.1 | 18 Feb 23:59:40 - [nodemon] exception in nodemon killing node
23:59:40 app.1 | exited with code 3
23:59:40 system | sending SIGKILL to all processes
アプリは単にクラッシュし、リカバリは行われません。その後、ForemanはProcfileで宣言された他のプロセスをすべて強制終了します。
どんなアイデアでも大歓迎です!
注:nodemon
Windows(6.2.3)で別のバージョンを試したところ、同じ結果になりました