child_process.spawn()
Meteor メソッドで使用しようとしています。PID、stdout、stderr、および終了コードを外部プロセスから取得し、それらすべてをデータベースに保存したいと考えています。
insert()
最初の呼び出しを追加するまで、すべてが機能しました。これによりinsert()
、「ダミー」ドキュメントが 1 つだけデータベースに挿入されます。サーバー コンソールにエラー メッセージが表示されません。最初にそれをコメントアウトするとinsert()
、他のinsert()
呼び出しは成功します。
// server/app.js
var spawn = Npm.require('child_process').spawn;
Meteor.methods({
start: function() {
var child = spawn('ls', ['/tmp']);
var pid = child.pid;
var wrappedChildStdoutOn = Meteor.wrapAsync(child.stdout.on, child.stdout);
var wrappedChildStderrOn = Meteor.wrapAsync(child.stderr.on, child.stderr);
var wrappedChildOn = Meteor.wrapAsync(child.on, child);
// this insert() breaks upcoming insert() calls!
Stuff.insert({pid: pid, date: new Date(), type: 'dummy', data: 'dummy'});
wrappedChildStdoutOn('data', function (data) {
Stuff.insert({pid: pid, date: new Date(), type: 'stdout', data: data.toString()});
});
wrappedChildStderrOn('data', function (data) {
Stuff.insert({pid: pid, date: new Date(), type: 'stderr', data: data.toString()});
});
wrappedChildOn('exit', function (code) {
Stuff.insert({pid: pid, date: new Date(), type: 'exit', code: code});
});
}
});
その最初のinsert()
電話はどうしたの?