2010-05-12 4 views
17

je le code suivant dans /config/initializers/chargify.rbRails initialiseur pour le développement et la production

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

Mais j'ai des réglages différents pour le développement et la production. Alors, comment aurais-je un ensemble différent de valeurs de variables basées sur l'environnement?

Répondre

29

Je voudrais créer un fichier de configuration pour cette (config/chargify.yml):

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

Et puis changer votre Initializer comme ceci:

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

Mise en garde rapide pour tout le monde de copier-coller: above: sudomain: example' devrait être 'subdomain: example' –

4

Si vous avez besoin de paramètres différents pour différents environnements, il est préférable de les placer dans le fichier d'environnement correspondant, par exemple config/environments/development.rb. Si vous insistez absolument pour les mettre dans un initialiseur (mais s'il vous plaît ne le faites pas, c'est ce que les fichiers d'environnement sont), vous pouvez utiliser une instruction case et inspecter la valeur de Rails.env, qui renvoie le nom du courant environnement comme une chaîne.

+0

Les commentaires dans application.rb pour * ne * pas mettre la configuration sur ces fichiers et pour le mettre dans les fichiers dans le répertoire des initialiseurs. –

5

Qu'en est-:

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 

Mieux encore , vous pouvez réduire la duplication avec case bloc:

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

Je vous suggère d'utiliser des variables env

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

et définir des variables appropriées dans ~/.bashrc ou ~/.profile mais note: cela doit être défini pour un même utilisateur que Rails est par exemple opareting sur. Par exemple. déployer l'utilisateur spécifié dans capistrano est utilisé pour les déploiements

Questions connexes