2013-08-12 6 views
16

Moje środowisko testowe i produkcyjne Konfiguracja railsów jest w 99% taka sama, z tylko kilkoma ustawionymi różnymi ustawieniami (np. Poziomem dziennika), i naprawdę chciałbym wyeliminować duplikację między tymi dwoma pliki środowiska.środowiska konfiguracyjne kaskadowania/dziedziczenia/współdzielenia

Na przykład, mam coś takiego:

# config/environments/staging.rb 
MyApp::Application.configure do 
    config.cache_classes = true 
    config.static_cache_control = "public, max-age=31536000" 
    config.log_level = :debug 
    # ... 
end 

# config/environments/production.rb 
MyApp::Application.configure do 
    config.cache_classes = true 
    config.static_cache_control = "public, max-age=31536000" 
    config.log_level = :info 
    # ... 
end 

Wszelkie zalecenia na najlepszej drodze do stworzenia wspólnej konfiguracji, które również nie wpływa na moje środowisko programistyczne?

Odpowiedz

28

w moich projektów, mam 3 środowisk produkcyjnych, jak więc mam plik o nazwie shared_production .rb pod config/environments gdzie mogę umieścić wspólną konfigurację

MyApp::Application.configure do 
    config.cache_classes = true 
    config.consider_all_requests_local = false 
    #more shared configs 
end 

A potem w każdym konkretnym pliku konfiguracyjnym środowiska (production.rb, staging.rb, testing.rb) zrobić

require File.expand_path('../shared_production', __FILE__) 
MyApp::Application.configure do 
    config.log_level = :debug 
    #more environment specific configs 
end 
+3

DHH ma podobne podejście i dużo więcej szczegółów w http://signalvnoise.com/posts/3535-beyond-the-default-rails-environment –

-2

Zmienna jest inicjalizowana i dostępna przed wykonaniem tych plików. Więc, po prostu umieścić wszystkie wspólne rzeczy w udostępnionym pliku config/environment.rb jak i zawinąć wszystko, co różni się

if Rails.env.development? 
    config.now_for_something_completely_different 
end 
+3

I don takie rozwiązanie, ponieważ podważa bardzo racjonalne podejście Railsów do dzielenia ustawień dla każdego środowiska na osobny plik. Jeśli pojawi się ktoś nowy i będzie pracował nad aplikacją, przejdzie do pliku konfiguracyjnego środowiska i nie będzie miał pojęcia, co się dzieje; w międzyczasie mój plik config/application.rb jest obciążonym warunkowo, DRY violing mess. Doceniam jednak dane wejściowe. – coreyward

Powiązane problemy