2012-04-06 10 views
14

मैं आरओआर के लिए अपेक्षाकृत नया हूं और मैं इस बारे में उत्सुक हूं कि क्यों रेल उत्पादन के लिए एमडी 5 हैश के साथ और बिना संपत्तियों को संकलित करता है?रेल एमडी 5 हैश के साथ और बिना दोनों संपत्तियों को संकलित करता है, क्यों?

मैं bundle exec rake assets:clean तो bundle exec rake assets:precompile

मेरे 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 

    # 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 

    config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

    config.assets.precompile += %w(tos.js, tos.css) 

    config.i18n.fallbacks = true 

    config.active_support.deprecation = :notify 

end 

मेरा आवेदन उनके नाम में हैश के साथ फाइलों के साथ काम करता है और यह जिस तरह से यह मेरे मामले में होना चाहिए :)

तो मेरे यहां दो प्रश्न हैं:

1) संकलित होने पर यह क्यों हो रहा है?

रेल दोनों के साथ और के लिए उत्पादन

2 के लिए MD5 हैश) इन फ़ाइलों (हैश के बिना क्या कर रहे हैं) के बिना संपत्ति संकलित?

शायद मुझे कुछ नहीं मिलता है, तो कृपया कोई समझा सकता है।

उत्तर

14

इसका कारण यह है कि आप MD5 फिंगरप्रिंट को जानने के बिना फ़ाइलों तक पहुंच सकते हैं (उदाहरण के लिए गैर-रेल अनुप्रयोग में, या रेल ऐप के अंदर एक फ़ाइल जिसे रेल स्टैक द्वारा संकलित या चलाया नहीं जाता है (उदाहरण के लिए 500/502 स्थिति त्रुटि पृष्ठ)। इस मामले में आपको संपत्तियों को संकलित करना होगा, फिर प्रत्येक बार जब आप कोड अपडेट करेंगे (इस प्रकार एमडी 5 हैश में परिवर्तन हो रहा है) तो स्थिर HTML फ़ाइलों में सीएसएस/जेएस लिंक को बदलें।

बजाय रेल प्रत्येक संपत्ति फ़ाइल के 2 प्रतियां, फ़ाइल नाम में अंगुली की छाप के साथ एक, बिना अन्य (जैसे आवेदन-731bc240b0e8dbe7f2e6783811d2151a.css, और application.css) पैदा करता है। उंगलियों के निशान संस्करण जाहिर पसंद किया जाता है ('what is fingerprinting and why should I care देखना 'rails asset pipeline guide में) लेकिन गैर-पचाने वाला एड संस्करण एक फॉलबैक के रूप में है।

इस मामले पर अंतिम विचार के रूप में मैं रेल गिट रेपो को निम्नलिखित पुल अनुरोध का एक पठन लेता हूं: https://github.com/rails/rails/pull/5379 जहां वे गैर-पचाने वाले फ़ाइल नामों के पेशेवरों और विपक्षों पर चर्चा कर रहे हैं, और सक्षम होने की संभावना उनके संकलन को बंद करने के लिए।

HTH

+0

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

+1

चीजों के फ्लिप पक्ष पर, मेरे रेल इंस्टॉलेशन के समान सटीक कॉन्फ़िगरेशन है, लेकिन यह केवल फिंगरप्रिंट के साथ संपत्तियों को संकलित करता है, और फिंगरप्रिंट के बिना संस्करणों को संकलित नहीं कर रहा है। क्रिस बेली द्वारा सूचीबद्ध कारणों के लिए यह बहुत परेशान है। कुछ अनुमान है इसे कैसे ठीक किया जा सकता है? – NudeCanalTroll

+2

@NudeCanalTroll: आप 'रेक संपत्ति नहीं चला रहे हैं: प्रीकंपाइल: nondigest'। – jpatokal

संबंधित मुद्दे