繁体   English   中英

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

[英]Rails initializer for development and production

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

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

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

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

我会为此创建一个配置文件( 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

关于什么:

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

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

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

我建议你使用env变量

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM