我在/config/initializers/chargify.rb
Chargify.configure do |c|
c.subdomain = 'example'
c.api_key = '123xyz'
end
但我对开发和制作有不同的设置。
那么,我如何根据环境获得一组不同的变量值?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:4)
如果您需要针对不同环境设置不同的设置,最好将它们放在相应的环境文件中,例如config/environments/development.rb
。
如果您绝对坚持将它们放在初始化程序中(但请不要,这就是环境文件的用途),您可以使用case
语句并检查Rails.env
的值,它以字符串形式返回当前环境的名称。
答案 3 :(得分:0)
我建议你使用env变量
Chargify.configure do |c|
c.subdomain = ENV['APP_SUBDOMAIN']
c.api_key = ENV['API_KEY']
end
并在〜/ .bashrc或〜/ .profile中设置适当的变量 但请注意:必须为Rails实例选择的用户设置此项。例如。在capistrano中指定的部署用户是用于部署的