2010-05-12 80 views
17

我在/config/initializers/chargify.rbRails的初始開發和生產

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

下面的代碼,但我有研發和生產不同的設置。

那麼,我將如何根據環境有一組不同的變量值?

回答

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

任何人從上面剪切粘貼的快速警告:'sudomain:example'應該是'subdomain:example' – 2012-05-22 10:03:06

4

如果您要針對不同的環境需要不同的設置,最好將它們放在各自的環境文件中,如config/environments/development.rb

如果你絕對堅持把它們放入初始化程序中(但請不要,這就是環境文件的用途),可以使用case語句並檢查Rails.env的值,該值返回當前的名稱環境作爲一個字符串。

+0

application.rb中的註釋將* not *放置在這些文件上並將其放入初始化程序目錄中的文件中。 – 2012-01-11 23:07:29

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 
0

我建議你在〜/ .bashrc或〜/ .profile文件 但要注意使用ENV變量

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

,並設置相應的變量:這個必須爲相同的用戶被設置爲Rails的實例暴露。例如。部署在capistrano中指定的用戶是用於部署的