这有很多应用程序,但我当前的应用程序是从Cakefile将测试数据加载到数据库中。当我使用mongodb驱动程序创建文档时,它会添加_id
ObjectId("527d9761ae5c03ce1c000001")
而不是"he3KMaEwsX457ejPW"
自动添加的Meteor.Collection.insert
字符串。我希望能够在Meteor上下文中运行Cakefile,这样我就可以简单地调用CollectionName.insert
而不是使用mongodb驱动程序。
答案 0 :(得分:2)
我是这样做的:
{spawn} = require 'child_process'
option '-e', '--environment [ENVIRONMENT_NAME]', 'set the environment for `start`'
task 'start', 'start the server', (options) ->
process.env.METEOR_ENV = options.environment ? 'development'
spawn 'meteor', [], stdio: 'inherit'
现在,当我运行cake start
时,METEOR_ENV
变量将默认为'development'
。您可以使用此处所需的任何字符串运行start,例如:
cake -e production start
Meteor.startup ->
environment = process.env.METEOR_ENV ? 'production'
return if environment is 'production'
insertCollections = []
if environment is 'development'
insertCollections = [
insertUsers, Meteor.users
insertGroups, Groups
]
for insert, index in insertCollections by 2
collection = insertCollections[index + 1]
insert() if collection.find().count() is 0
在此示例中,在服务器启动后,它会查看我们所处的环境。如果它是'production'
,请在不初始化数据库的情况下退出。如果环境为“development'
,则创建一个交替的函数和集合名称的数组。然后,对于每对,只有在集合为空时才调用该函数。在这种情况下,您需要在其他地方定义insertUsers
和insertGroups
。
我喜欢这种设置,因为它会在每meteor reset
之后自动填充我的数据库。