【问题标题】:Initializing Mongoid without .load()在没有 .load() 的情况下初始化 Mongoid
【发布时间】:2015-07-30 17:05:41
【问题描述】:

我的 Sinatra 应用中有以下行:

Mongoid.load!('./config/database/mongoid.yml')

这很好,但我不想将我的连接详细信息保存在 YAML 文件中,并将其添加到 .gitignore。我想将它们保留在ENV 中。

过去,我可以通过将 username: <%= ENV['MONGODB_USER'] %> 之类的内容添加到 YAML 配置文件中,然后将其作为 ERB 读取,保存并在 Heroku 擦除磁盘之前使用 Mongoid.load! 再次读取它来绕过此问题。不用说,这很疯狂。

我能找到的只是 .load! over here 的定义,而且看起来没有任何解决办法。

是否有一些隐藏的方式来以编程方式配置Mongoid 连接?

提前致谢。

【问题讨论】:

  • 这也是所有 rails 所做的,它只是解析 /config 中的 database.yml 文件
  • 很好,但我仍然想在没有任何数据库配置文件的情况下发布应用程序,只需使用ENV。 Mumble Mumble 12 要素应用程序

标签: ruby mongodb heroku orm mongoid


【解决方案1】:

mu's answer 为基础:

你可以像这样给 Mongoid 一个哈希用于初始化:

Mongoid.load_configuration(clients: {
  default: {
    database: database,
    hosts: [ host ]
  }
})

请注意,您传递给load_configuration 的哈希不应以您通常在mongoid.yml 中拥有的环境键开头。

【讨论】:

    【解决方案2】:

    Mongoid.load! 做的不多:

    def load!(path, environment = nil)
      settings = Environment.load_yaml(path, environment)
      if settings.present?
        Sessions.disconnect
        Sessions.clear
        load_configuration(settings)
      end
      settings
    end
    

    它所做的只是记账,加载 YAML,然后交给 load_configuration 来完成繁重的工作。没有什么能阻止您手动构建 settings 哈希并自己调用 Mongoid.load_configuration

    【讨论】:

    • 只是为了让这个答案更加清晰,你需要像Mongoid.load_configuration(clients: { default: { database: database, hosts: [ host ] } }) 这样的东西。注意load_configuration 采用没有顶级环境的配置。
    • @MatSchaffer:您想将其添加为另一个答案吗?对我来说似乎是一个有价值的补充。
    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多