2013-02-19 31 views
12

के बीच डुप्लिकेशंस निकालें मेरे पास मेरे रेल एप्लिकेशन (हेरोकू पर चलने) के लिए एक स्टेजिंग और उत्पादन वातावरण है। फिलहाल, वहाँ staging.rb और production.rb में सामान का एक बहुत है कि मैं प्रत्येक फ़ाइल में अलग से परिभाषित करने के लिए आ रही हैं, उदा .:staging.rb और production.rb

# Code is not reloaded between requests 
    config.cache_classes = true 

    # Full error reports are disabled and caching is turned on 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 

    # Disable Rails's static asset server (Apache or nginx will already do this) 
    config.serve_static_assets = false 

    # Compress JavaScripts and CSS 
    config.assets.compress = true 

    # Don't fallback to assets pipeline if a precompiled asset is missed 
    config.assets.compile = false 

    # Generate digests for assets URLs 
    config.assets.digest = true 

यह DRY नहीं है। क्या कोई शानदार तरीका है कि मैं उत्पादन.आरबी से staging.rb में सेटिंग्स को प्रभावी ढंग से आयात कर सकता हूं और फिर उन सेटिंग्स को ओवरराइड कर सकता हूं जिन्हें मैं स्टेजिंग वातावरण के लिए बदलना चाहता हूं?

उत्तर

16

मैंने पहले जो किया है, उसमें एक फ़ाइल है जिसमें साझा सेटिंग्स हैं और फिर इसे उत्पादन और स्टेजिंग पर्यावरण फ़ाइलों में आवश्यकता होती है। यह अच्छी तरह से काम किया है क्योंकि यह आपको एक ही स्थान पर सामान्य सेटिंग्स को परिभाषित करने, और उसके बाद अलग-अलग फ़ाइलों में अद्वितीय सेटिंग तय कर सकते हैं:

config/वातावरण/shared_production.rb

MyApp::Application.configure do 
    # Code is not reloaded between requests 
    config.cache_classes = true 

    # Full error reports are disabled and caching is turned on 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 
end 

config /environments/production.rb

require Rails.root.join('config/environments/shared_production') 

MyApp::Application.configure do 
    # Raise exception on mass assignment protection for Active Record models 
    config.active_record.mass_assignment_sanitizer = :logger 

    # Url to be used in mailer links 
    config.action_mailer.default_url_options = { :host => "production.com" } 
end 

config/वातावरण/staging.rb

require Rails.root.join('config/environments/shared_production') 

MyApp::Application.configure do 
    # Raise exception on mass assignment protection for Active Record models 
    config.active_record.mass_assignment_sanitizer = :strict 

    # Url to be used in mailer links 
    config.action_mailer.default_url_options = { :host => "mysite-dev.com" } 
end 
+1

यह वही है जो मैं ढूंढ रहा था। =) Gracias! –

+1

रूबी 1.9+ के साथ आप requ_relative का उपयोग कर सकते हैं। – codingFoo

2

मुझे लगता है कि यह कितना अच्छा है। वे विन्यास सेटिंग्स हैं और अलग-अलग सेट करने के लिए हैं। आप कॉन्फ़िगरेशन में पास करने के लिए वास्तव में एक फ़ंक्शन को परिभाषित कर सकते हैं। उस फ़ंक्शन पर, आप डिफ़ॉल्ट सेट कर सकते हैं लेकिन मैं ऐसा नहीं करना चाहता। किसी प्रोजेक्ट के जीवन चक्र में, आप केवल 5 (या 10) वातावरण से कम काम करते हैं, इसलिए आपको इनमें से अधिकतर फाइलों की आवश्यकता होती है जिन्हें आप हर समय संपादित नहीं करेंगे।