我有以下代码在/config/initializers/chargify.rb
中。
Chargify.configure do |c|
c.subdomain = 'example'
c.api_key = '123xyz'
end
但是我在开发和生产环境中有不同的设置。
那么,我如何根据不同的环境设置一组不同的变量值呢?
我有以下代码在/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
sudomain: example
应该是 subdomain: example
。 - Jules Copeland关于这个问题:
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
的值,该值返回当前环境的名称作为字符串。Chargify.configure do |c|
c.subdomain = ENV['APP_SUBDOMAIN']
c.api_key = ENV['API_KEY']
end
并在 ~/.bashrc 或 ~/.profile 中设置适当的变量,但请注意:这必须为与 Rails 实例操作相同的用户设置。例如,如果您在部署中使用了 capistrano 指定的部署用户,则必须设置该用户。