[英]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.