2010-05-12 13 views
17

tengo el siguiente código en /config/initializers/chargify.rbrieles inicializador para el desarrollo y la producción

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

Pero tengo diferentes configuraciones para el desarrollo y la producción.

Entonces, ¿cómo podría tener un conjunto diferente de valores de variables basados ​​en el entorno?

Respuesta

29

me gustaría crear un archivo de configuración para esto (config/chargify.yml):

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

Y luego cambia de inicializador de esta manera:

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

Advertencia rápida para cualquier persona que corte y pegue desde arriba: 'sudomain: example' debe ser' subdominio: example' –

4

Si va a necesitar configuraciones diferentes para diferentes entornos, lo mejor es ponerlas en el archivo de entorno respectivo, como config/environments/development.rb.

Si absolutamente insiste en ponerlos en un inicializador (pero no, para eso sirven los archivos de entorno), puede usar una declaración case e inspeccionar el valor de Rails.env, que devuelve el nombre de la corriente medio ambiente como una cadena.

+0

Los comentarios en application.rb a * not * ponen la configuración en esos archivos y los colocan en los archivos en el directorio de inicializadores. –

5

¿Qué hay de:

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 

Mejor aún , puede reducir la duplicación con el bloque 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

Yo sugeriría que usted utilice las variables env

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

y establecer variables adecuadas en ~/.bashrc o ~/.profile pero nota: esto se debe establecer para un mismo usuario como carriles ejemplo es opareting en. P.ej. deploy user especificado en capistrano si lo usaste para las implementaciones

Cuestiones relacionadas