我正在探索编写一个与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,它是相当容易开始....所以开始行动吧!