Ruby on rails 用于开发和生产的Rails初始化器

Ruby on rails 用于开发和生产的Rails初始化器,ruby-on-rails,environment,initializer,Ruby On Rails,Environment,Initializer,我在/config/initializers/chargify.rb Chargify.configure do |c| c.subdomain = 'example' c.api_key = '123xyz' end 但我有不同的开发和生产设置 那么,如何根据环境设置不同的变量值呢?如果您需要为不同的环境设置不同的设置,最好将它们放在相应的环境文件中,如config/environments/development.rb 如果您绝对坚持将它们放在初始值设定项中(但请不要这样做,这

我在
/config/initializers/chargify.rb

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = '123xyz'
end
但我有不同的开发和生产设置


那么,如何根据环境设置不同的变量值呢?

如果您需要为不同的环境设置不同的设置,最好将它们放在相应的环境文件中,如
config/environments/development.rb


如果您绝对坚持将它们放在初始值设定项中(但请不要这样做,这就是环境文件的用途),您可以使用
case
语句检查
Rails.env
的值,该值以字符串形式返回当前环境的名称。

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

然后像这样更改初始值设定项:

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
那么:

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

我建议您使用env变量

Chargify.configure do |c|
  c.subdomain = ENV['APP_SUBDOMAIN']
  c.api_key = ENV['API_KEY']
end
并在~/.bashrc或~/.profile中设置适当的变量
但请注意:这必须为Rails实例正在启用的同一用户设置。例如,在capistrano中指定的deploy user用于部署

application.rb中的注释,以不将配置放在这些文件上,并将其放在initializers目录中的文件中。对从上面剪切和粘贴的任何人的快速警告:
sudomain:示例
应该是
子域:示例
Josh,这就是Baremetrics的MVP吗?历史就在这里:)@JanKlimo Haha,naaa。这比Baremetrics在我脑子里形成想法早了3年多P
Chargify.configure do |c|
  c.subdomain = ENV['APP_SUBDOMAIN']
  c.api_key = ENV['API_KEY']
end