17

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

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = '123xyz'
end

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

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

4

4 回答 4

29

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

development:
  subdomain: example
  api_key: 123abc
production:
  subdomain: production_domain
  api_key: 890xyz

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

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
于 2010-05-12T13:17:22.907 回答
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

更好的是,您可以使用块减少重复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
于 2011-01-12T19:09:27.063 回答
4

如果您需要针对不同的环境进行不同的设置,最好将它们放在各自的环境文件中,例如config/environments/development.rb.

如果您绝对坚持将它们放在初始化程序中(但请不要,这就是环境文件的用途),您可以使用case语句并检查 的值Rails.env,它将当前环境的名称作为字符串返回。

于 2010-05-12T13:14:47.903 回答
1

我建议你使用环境变量

Chargify.configure do |c|
  c.subdomain = ENV['APP_SUBDOMAIN']
  c.api_key = ENV['API_KEY']
end

并在 ~/.bashrc 或 ~/.profile 中设置适当的变量,但请注意:这必须为 Rails 实例正在运行的同一用户设置。例如,在 capistrano 中指定的部署用户是您用于部署的用户吗

于 2017-05-04T13:02:55.913 回答