2010-05-12 15 views
17

Mam następujący kod w /config/initializers/chargify.rbSzyny inicjator rozwoju i produkcji

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

Ale mam różne ustawienia dla rozwoju i produkcji.

A więc, w jaki sposób miałbym inny zestaw wartości zmiennych na podstawie środowiska?

Odpowiedz

29

Chciałbym utworzyć plik konfiguracyjny dla tego (config/chargify.yml):

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

A potem zmienić initializer tak:

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

Szybkie ostrzeżenie dla każdego, kto wycina i wkleja z góry: 'sudomain: example' powinno być' subdomain: example' –

4

Jeśli potrzebujesz różnych ustawień dla różnych środowisk, najlepiej umieścić je w odpowiednim pliku środowiska, np. config/environments/development.rb.

Jeśli koniecznie nalegać na wprowadzenie ich do inicjowania (ale proszę nie robić, to co środowisko pliki są za), można użyć case oświadczenie i sprawdzić wartość Rails.env, która zwraca nazwę bieżącego środowisko jako ciąg.

+0

Komentarze w application.rb do * nie * umieścić konfigurację na tych plikach i umieścić go w plikach w katalogu inicjalizatorów. –

5

Co o:

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 

Jeszcze lepiej można zmniejszyć liczbę duplikatów blokiem 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

Proponuję używać zmiennych env

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

i ustawić odpowiednie zmienne w pliku ~/.bashrc lub ~/.profile ale uwaga: to musi być ustawiony dla samego użytkownika, jak Szyny instancji jest opieranie się. Na przykład. wdrożyć użytkownika określonego w Capistrano jest używany do wdrożenia

Powiązane problemy