如何以可重现的方式在Sails.js中对dev数据库进行种子设定

时间:2015-06-29 18:34:53

标签: sails.js

我正在寻找一种在sails js中种植我的开发数据库的最佳方法。

在rails中,我只使用seeds.rb文件,但即便没有,我也可以使用rake任务。

对于风帆,我不确定如何在手动操作风帆控制台之外做到这一点。

请注意,为配置/模型添加逻辑的解决方案以及用于生产种子的模型本身并不是我想要的。我不希望这些记录存在于制作中。

2 个答案:

答案 0 :(得分:4)

您可以使用测试框架,如Mocha。在开发模式下,将表名切换为development表。这是一步一步:

  1. 使用mocha
  2. 安装npm install mocha --save-dev
  3. 创建test/boostrap.test.js并填写(根据您的需要进行配置),查看我已配置的connections,它会覆盖connections处的默认config

    var Sails = require('sails'),
    sails;
    
    before(function (done) {
      Sails.lift({
        log        : {
          level: 'error'
        },
        connections: {
          mongodbServer: {
            database: 'table_test'
          }
        },
        models     : {
          migrate: 'drop'
        }
      }, function (err, server) {
        sails = server;
        done(err, sails);
      });
    });
    
    after(function (done) {
      // here you can clear fixtures, etc.
      sails.lower(done);
    });
    
  4. 创建另一个用于播种数据的文件,例如创建test/inject/seed.js并填写类似的内容。

    describe('data seeding', function(){
      it('should seed data', function(done){
        sails.models.someModel
          .create({
            name: 'Some Name'
          })
          .then(function(result){
            done();
          })
          .catch(done);
      });
    });
    
  5. package.json"scripts"键下添加此内容。

    "test": "_mocha test/bootstrap.test.js test/inject/**/*.inject.js --no-timeouts"
    
  6. 使用npm test运行它以播种数据。

  7. 如果您需要在开发模式下使用它,当您运行sails lift时,请修改config/env/development.js并添加类似内容。

    module.exports = {
    
      connections: {
        mongodbServer: {
          database: 'table_test'
        }
      }
    
    };
    
  8. 现在您的sails lift将使用table_test代替生产表,因此您的生产表将会干净。

答案 1 :(得分:4)

您可以在config/bootstrap.js文件中播种数据库。

为特定环境播种,我通常做的是:

// config/bootstrap.js
module.exports.bootstrap = function (cb) {

  if(process.env.NODE_ENV !== 'development')
    return cb();

  // Do whatever you want
  // And don't forget to...
  return cb();

};

每次在Sails提升期间删除数据库:

// config/env/development.js
module.exports = {

  models: {
    migrate: 'drop'
  }

};