为Sails.js应用程序初始化MongoDB数据库和用户的推荐方法是什么?



我正在探索编写一个与mongodb数据存储对话的Sails.js应用程序。我已经把它都工作得很好,但我希望能够添加一些在npm install点运行的初始化过程,类似于Rails世界中的rake admin:create

我猜这可以通过grunt任务以某种方式完成,但我想,在我推出自己的解决方案之前,我会问其他帆/MongoDB用户他们在现实世界中实际做了什么,看看是否出现了一致或最佳实践的解决方案。

Sails应用程序的数据库初始化通常在config/bootstrap.js文件中完成。一个简单的例子是:

module.exports = function(cb) {
    User.findOrCreate(
        // Search for user with "admin" flag
        {admin: true},
        // Create one if no such user is found
        {admin: true, name: 'Admin User', ...}
    ).exec(cb);
}

bootstrap只会在Sails被解除时运行,直到回调被执行后服务器才会启动。如果你发送任何东西作为回调的第一个参数,它将被认为是一个错误(像大多数标准Node回调),它将停止服务器的解除。

注意,您不能使用Waterline创建实际的数据库。Grunt任务将是一个很好的地方,但是您必须考虑到Grunt无法访问Sails配置,因此您必须硬编码要使用的数据库的名称,或者找到其他方法使其可配置。这可能会对不同的环境产生影响(例如,开发环境与生产环境)。在我们Balderdash的项目中,我们通常将数据库创建作为开发人员在签出代码后的手动步骤,然后使用bootstrap.js初始化数据。这允许开发人员使用config/local.js维护他们自己的数据库设置。

说了这么多,我可以看到设置一个Grunt任务为生产创建一个db的价值,使它更容易部署你的Sails应用程序到它的最终目的地。

我个人认为sails.js团队使用Grunt是一个明智的决定。Grunt为您所需要的任何自动化提供了可靠而灵活的解决方案。

我在sails.js项目中使用grunt,包括....

  • 从遗留数据库导入数据
  • 编译sass(即使sails默认使用更少)
  • 编译coffeescript
  • 组装敲除模板
  • 将索引加载到elasticsearch

你不会失望使用Grunt,它是相当容易开始....所以开始行动吧!

相关内容

最新更新