【问题标题】:Using Gulp to manage opening and closing MongoDB使用 Gulp 管理打开和关闭 MongoDB
【发布时间】:2015-04-24 06:45:22
【问题描述】:

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

【问题讨论】:

    标签: node.js mongodb gulp nodemon


    【解决方案1】:

    我正在尝试类似的东西并遇到了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'));
    

    【讨论】:

      【解决方案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);
      });
      

      【讨论】:

        【解决方案3】:

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

        所以你的 gulp 任务会是这样的:

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

        【讨论】:

          猜你喜欢
          • 2021-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多