2010-05-12 12 views
17

ho il seguente codice nel /config/initializers/chargify.rbRails inizializzatore per lo sviluppo e la produzione

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

Ma devo impostazioni diverse per lo sviluppo e la produzione.

Quindi, come avrei un diverso insieme di valori di variabili in base all'ambiente?

risposta

29

vorrei creare un file di configurazione per questo (config/chargify.yml):

development: 
    subdomain: example 
    api_key: 123abc 
production: 
    subdomain: production_domain 
    api_key: 890xyz 

E poi cambiare Initializer in questo modo:

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

Avviso rapido per chiunque tagli e incolla dall'alto: 'sudomain: example' dovrebbe essere' sottodominio: esempio' –

4

Se hai bisogno di impostazioni diverse per ambienti diversi, è meglio metterli nel rispettivo file di ambiente, come config/environments/development.rb.

Se si vuole assolutamente inserirli in un inizializzatore (ma si prega di non farlo, questo è ciò che i file di ambiente sono per), è possibile utilizzare una dichiarazione case e ispezionare il valore di Rails.env, che restituisce il nome della corrente ambiente come una stringa.

+0

I commenti in application.rb to * not * inseriscono la configurazione su tali file e inserirli nei file nella directory initializers. –

5

Che dire:

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 

Meglio ancora , è possibile ridurre la duplicazione con il blocco 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

vorrei suggerire di utilizzare le variabili env

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

e impostare variabili appropriate in ~/.bashrc o ~/.profile ma nota: questo deve essere impostato per lo stesso utente come Rails esempio è oparando su Per esempio. distribuire l'utente specificato in capistrano viene utilizzato per le distribuzioni

Problemi correlati