【问题标题】:What is the best way to store app specific configuration in rails?在 Rails 中存储应用程序特定配置的最佳方式是什么?
【发布时间】:2010-09-11 17:23:26
【问题描述】:

我需要将应用程序特定的配置存储在 rails 中。但它必须是:

  • 可在任何文件(模型、视图、帮助程序和控制器)中访问
  • 指定(或不指定)环境,这意味着每个环境都可以覆盖 environment.rb 中指定的配置

我尝试使用 environment.rb 并放置类似

USE_USER_APP = true

这对我有用,但是当尝试在特定环境中覆盖它时它不会起作用,因为例如 production.rb 似乎在 Rails:Initializer.run 块内。

那么,有人吗?

【问题讨论】:

    标签: ruby-on-rails configuration


    【解决方案1】:

    看配置:http://github.com/markbates/configatron/tree/master

    我还没用过,不过他现在正在积极开发,看起来还不错。

    【讨论】:

      【解决方案2】:

      昨天我正在帮朋友设置the solution mentioned by Ricardo。我们通过加载与此类似的 YAML 文件(从这里的内存中获取)来稍微破解它:

      require 'ostruct'
      require 'yaml'
      require 'erb'
      #config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
      config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result))
      env_config = config.send(RAILS_ENV)
      config.common.update(env_config) unless env_config.nil?
      ::AppConfig = OpenStruct.new(config.common)
      

      这让他可以在配置中嵌入 Ruby 代码,就像在 Rhtml 中一样:

      development:
        path_to_something: <%= RAILS_ROOT %>/config/something.yml
      

      【讨论】:

        【解决方案3】:

        最基本的事情是从你的 environment.rb 中设置一个类变量。我为谷歌分析做了这个。本质上,我想要一个不同的密钥,这取决于我所处的环境,因此开发或登台不会扭曲指标。

        我就是这样做的。

        lib/analytics/google_analytics.rb:

        module Analytics
          class GoogleAnalytics
            @@account_id = nil
        
            cattr_accessor :account_id
          end
        end
        

        然后在environment.rbenvironments/production.rb 或任何其他环境文件中:

        Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"
        

        然后在您需要引用的任何地方,例如使用 Google Analytics JavaScript 的默认布局,您只需调用 Analytics::GoogleAnalytics.account_id

        【讨论】:

          【解决方案4】:

          我找到了一个好方法here

          【讨论】:

            【解决方案5】:

            使用环境变量。 Heroku 使用这个。请记住,如果您将配置保存在代码库中,任何有权访问代码的人都可以访问任何秘密配置(aws api 密钥、网关 api 密钥等)。

            daemontool 的 envdir 是设置配置的好工具,我很确定 Heroku 就是用它来为应用程序提供环境变量。

            【讨论】:

              【解决方案6】:

              我用过Rails Settings Cached

              它使用起来非常简单,可以缓存您的配置值并允许您动态更改它们。

              【讨论】:

              • 是的,我认为这个 gem 对于存储简单的设置很有用。
              猜你喜欢
              • 2010-12-05
              • 2011-12-07
              • 2011-11-26
              • 2011-07-11
              • 2010-09-06
              • 2012-07-26
              • 2016-09-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多