使用Gulp管理打开和关闭MongoDB

时间:2015-02-23 00:49:23

标签: node.js mongodb gulp nodemon

到目前为止,我有一个child_process执行' mongod --dbpath db'还有另一个可以使用&m ;; mongod --dbpath db --shutdown'来杀死它的child_process。我如何监听用户输入ctrl-c或退出gulp runner,然后运行gulp任务来关闭mongo?

3 个答案:

答案 0 :(得分:6)

我正在尝试类似的东西并遇到了this answer。我重构它只是运行命令功能。在功能上,--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'));

答案 1 :(得分: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);
});

答案 2 :(得分:0)

如果您想要一个适用于任何操作系统/环境的独立于平台的解决方案,请进一步添加上述答案。你可以使用docker。

所以你的任务就像是:

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'));