到目前为止,我有一个执行“mongod --dbpath db”的子进程和另一个可以用“mongod --dbpath db --shutdown”杀死它的子进程。如何监听用户输入 ctrl-c 或退出 gulp runner,然后运行 gulp 任务来关闭 mongo?
问问题
5252 次
3 回答
6
我正在尝试类似的事情并遇到了这个答案。我对其进行了一些重构,使其成为运行命令功能。--shutdown
从功能上讲,和我正在使用的命令应该没有区别。
var gulp = require('gulp');
var exec = require('child_process').exec;
function runCommand(command) {
return function (cb) {
exec(command, function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
}
}
//Running mongo
//https://stackoverflow.com/a/28048696/46810
gulp.task('start-mongo', runCommand('mongod --dbpath ./data/'));
gulp.task('stop-mongo', runCommand('mongo --eval "use admin; db.shutdownServer();"'));
gulp.task('start-app', runCommand('node app.js'));
于 2015-03-07T07:04:48.610 回答
2
@QueueHammer 的回复非常有帮助,但是为了让我的详细信息(OSX、MongoDB 3.0.1)运行起来,它采取了以下措施:
var exec = require('child_process').exec;
var mkdirs = require('mkdirs');
var runCommand = function(command) {
exec(command, function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
if (err !== null) {
console.log('exec error: ' + err);
}
});
}
gulp.task("mongo-start", function() {
var command = "mongod --fork --dbpath "+paths.dbDir+"/ --logpath "+paths.dbLogs+"/mongo.log";
mkdirs(paths.dbDir);
mkdirs(paths.dbLogs);
runCommand(command);
});
gulp.task("mongo-stop", function() {
var command = 'mongo admin --eval "db.shutdownServer();"'
runCommand(command);
});
于 2015-04-08T01:11:55.477 回答
0
To further add on to the above answers, if you'd like a platform-independent solution that works in any OS/environment. You can use docker.
So you're gulp task would be something like:
const Gulp = require('gulp');
const exec = require('child_process').exec;
function runCommand(command) {
return function (cb) {
exec(command, function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
cb(err);
});
};
}
// Database tasks
Gulp.task('start-mongo', runCommand('docker run --rm --name mongo-dev -p 27017:27017 mongo'));
Gulp.task('start-mongo-viewer', runCommand('docker run --rm --name mongo-express-dev --link mongo-dev:mongo -p 8081:8081 mongo-express'));
于 2016-10-19T17:32:39.463 回答