用于开发和生产的Rails初始化程序

Shp*_*ord 17 environment ruby-on-rails initializer

我有以下代码 /config/initializers/chargify.rb

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = '123xyz'
end
Run Code Online (Sandbox Code Playgroud)

但我有不同的开发和生产设置.

那么,我如何根据环境获得一组不同的变量值呢?

jig*_*fox 29

我会为this(config/chargify.yml)创建一个配置文件:

development:
  subdomain: example
  api_key: 123abc
production:
  subdomain: production_domain
  api_key: 890xyz
Run Code Online (Sandbox Code Playgroud)

然后像这样更改你的初始化程序:

chargify_config_file = File.join(Rails.root,'config','chargify.yml')
raise "#{chargify_config_file} is missing!" unless File.exists? chargify_config_file
chargify_config = YAML.load_file(chargify_config_file)[Rails.env].symbolize_keys

Chargify.configure do |c|
  c.subdomain = chargify_config[:subdomain]
  c.api_key   = chargify_config[:api_key]
end
Run Code Online (Sandbox Code Playgroud)


And*_*rei 5

关于什么:

Chargify.configure do |c|
  if Rails.env.production?
    # production settings
    c.api_key   = '123xyz'
  else
    # dev. and test settings
    c.api_key   = '123xyz'
  end
end
Run Code Online (Sandbox Code Playgroud)

更好的是,您可以使用case块减少重复:

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = case
    when Rails.env.production?
      '123xyz'
    when Rails.env.staging?
      'abc123'
    else
      'xyz123'
    end
end
Run Code Online (Sandbox Code Playgroud)