自定 YAML Config 設定檔

RailsTips: Config So Simple Your Mama Could Use It 這篇看到一個非常簡單漂亮的用法,因為還蠻常
在 Rails 裡面用到的,特此一記:

可以將如下的 YAML 檔放在 config 目錄下,這裡用了一招 &DEFAULTS 可以複製相同的部分:


DEFAULTS: &DEFAULTS
  email: no-reply@harmonyapp.com
  email_signature: |
    Regards,
    The Harmony Team

development:
  domain: harmonyapp.local
  <<: *DEFAULTS

test:
  domain: harmonyapp.com
  <<: *DEFAULTS

production:
  domain: harmonyapp.com
  <<: *DEFAULTS

然後將以下這個 Module 檔放到 lib 目錄下 (或是 config/initializers 下也可以):


# /lib/harmony.rb
module Harmony
  # Allows accessing config variables from harmony.yml like so:
  # Harmony[:domain] => harmonyapp.com
  def self.[](key)
    unless @config
      raw_config = File.read(RAILS_ROOT + "/config/harmony.yml")
      @config = YAML.load(raw_config)[RAILS_ENV].symbolize_keys
    end
    @config[key]
  end

  def self.[]=(key, value)
    @config[key.to_sym] = value
  end
end

如此便可以讀到 Harmony[:domain] 了,依據不同 Rails 環境。

Leave a Reply