【问题标题】:Alternate for environment dependent global variables替代环境相关的全局变量
【发布时间】:2011-02-02 22:05:24
【问题描述】:

在我的 Ruby on Rails 项目中有几个地方我需要访问一个值,这取决于 Ruby on Rails 是在哪个环境中启动的。

具体来说,它是我需要建立连接的MongoDB 数据库的名称。

目前我只有这样的东西:

MONGO_DB = "database_name"

config/environments/< environment >.rb.

然后我可以在代码中调用Mongo::Connection.new.db(MONGO_DB)

在没有全局变量的情况下,有没有更好的方法来做到这一点?仅仅使用全局变量让我很不爽,尽管一旦应用程序启动它们就永远不会改变。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 mongodb


    【解决方案1】:

    希望有更好的方法。在 YAML Configuration File 中寻找灵感。

    将所有数据保存在 YAML 文件中是处理多种情况的一种非常干净的方式。

    【讨论】:

    • Rails 已经为每个环境都有一个配置文件,添加另一个文件似乎是不必要的冗余;那将是双加 unDRY。
    • 完美。正是我想要的。
    • 我真的不同意你的观点,例如我的 S3 和 capistrano 配置就有这样的文件。为了灵活性,请不要发明规则。
    • 啊,我想我明白你的意思了。您的意思是为您的 MANGO 配置设置一个 YAML 文件。我以为您是说为每个 environment.rb 文件将调用的所有配置添加一个 YAML 文件。我的错。编辑您的答案,我将取消投票。我很抱歉没有翻译您所说的内容。
    • YAML 文件是一个很好的解决方案;它们很容易理解并且可以在不同语言之间移植。如果您有用于数据库的 DSN 或为数据文件设置位置,并且需要在多个应用程序之间共享该公共配置信息,则在主机上为包含好东西的主配置文件定义一个特定目录。此外,如果您有一个事件循环,您可以定期检查该文件的最后修改日期,并在它发生更改时重新加载它,这样您就可以即时重新配置应用程序,而不是关闭它们并重新启动。
    【解决方案2】:

    您可以将您的设置包装在一个类或模块中:

    module Settings
       MONGO_DB = 'database_name'
    end
    

    然后访问它:

    Settings::MONGO_DB
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多