如何在Meteor上下文中运行脚本?

时间:2013-11-09 02:15:46

标签: meteor

这有很多应用程序,但我当前的应用程序是从Cakefile将测试数据加载到数据库中。当我使用mongodb驱动程序创建文档时,它会添加_id ObjectId("527d9761ae5c03ce1c000001")而不是"he3KMaEwsX457ejPW"自动添加的Meteor.Collection.insert字符串。我希望能够在Meteor上下文中运行Cakefile,这样我就可以简单地调用CollectionName.insert而不是使用mongodb驱动程序。

1 个答案:

答案 0 :(得分:2)

我是这样做的:

Cakefile

{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

服务器/ initialize.coffee

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',则创建一个交替的函数和集合名称的数组。然后,对于每对,只有在集合为空时才调用该函数。在这种情况下,您需要在其他地方定义insertUsersinsertGroups

我喜欢这种设置,因为它会在每meteor reset之后自动填充我的数据库。