2013-08-12 40 views
16

Môi trường sản xuất và dàn dựng của tôi Rails cấu hình là 99% giống với chỉ một vài điều khác nhau (ví dụ mức nhật ký) và tôi thực sự muốn loại bỏ sự trùng lặp giữa hai các tệp môi trường.Môi trường cấu hình Rãnh/Kế thừa/Chia sẻ Rails

Ví dụ, tôi có một cái gì đó như thế này:

# 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 

Bất kỳ đề xuất về cách tốt nhất để tạo ra một cấu hình chia sẻ rằng không còn ảnh hưởng đến môi trường phát triển của tôi?

Trả lời

28

Trong các dự án của tôi, tôi có 3 môi trường sản xuất như vậy tôi có một tập tin gọi là shared_production rb dưới config/environments nơi tôi đặt cấu hình chung

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

Và sau đó trong mỗi tập tin cấu hình cụ thể môi trường (production.rb, staging.rb, testing.rb) tôi làm

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

DHH có cách tiếp cận tương tự với nhiều chi tiết hơn trong http://signalvnoise.com/posts/3535-beyond-the-default-rails-environments –

-2

Biến số Rails.env được khởi tạo và khả dụng cho bạn trước khi các tệp này được thực thi. Vì vậy, chỉ cần đặt tất cả các công cụ phổ biến trong một file chia sẻ như config/application.rb, và quấn bất cứ điều gì khác với

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

tôi don Không thích giải pháp này bởi vì nó thay đổi cách tiếp cận rất hợp lý của Rails để tách các thiết lập cho từng môi trường thành một tệp riêng biệt. Nếu ai đó mới đến và làm việc trên ứng dụng, họ sẽ đi đến tệp cấu hình môi trường và không biết điều gì đang xảy ra; trong khi đó, tập tin config/application.rb của tôi là một trình đơn có điều kiện, DRY vi phạm mess. Tôi đánh giá cao đầu vào, mặc dù. – coreyward

Các vấn đề liên quan