2013-02-06 23 views
10

मैं रेल 3.1 पर रूबी में जावास्क्रिप्ट समृद्ध एप्लिकेशन लिख रहा हूं और अपने जेएस टेम्पलेटिंग फ्रेमवर्क के लिए हैंडलबार का उपयोग कर रहा हूं। मैं अपने हैंडलबार टेम्पलेट के अंदर अपने टैग में एक परिसंपत्ति के एमडी 5 डाइजेस्ट (उत्पादन पर परिसंपत्ति प्रीकंपिलेशन के दौरान उत्पन्न) को गतिशील रूप से जोड़ने का एक तरीका जानने का प्रयास कर रहा हूं। मैं उम्मीद कर रहा हूं कि संपत्ति के पथ के साथ हैश के रूप में कुंजी और एमडी 5 पाचन के रूप में पाचन है, लेकिन मैं एक खोजने में सक्षम नहीं हूं।मैं रेल संपत्ति परिसंपत्ति पाइपलाइन में किसी दिए गए संपत्ति के एमडी 5 पचाने का निर्धारण कैसे कर सकता हूं?

एक आदर्श समाधान रुबी से जावास्क्रिप्ट में हैश पास कर रहा है और हैंडलबार्स सहायक को परिभाषित करेगा जो स्वचालित रूप से संपत्ति के "src" विशेषता में MD5 पाचन को जोड़ देगा।

क्या किसी ने ऐसा कुछ करने का प्रयास किया है? रेल में जावास्क्रिप्ट टेम्पलेट्स का उपयोग करने और संपत्ति फिंगरप्रिंटिंग के लाभों का लाभ उठाने का एक तरीका होना चाहिए।

+0

यह उत्पादन env में एक डिफ़ॉल्ट है [आस्ति-पाइपलाइन गाइड] (http://guides.rubyonrails.org/asset_pipeline.html) –

+1

आपकी जेसन प्रतिक्रिया में परिसंपत्ति_पथ का उपयोग करने के बारे में क्या? – mathieugagne

उत्तर

36

जैसा कोई टिप्पणी में उल्लिखित है, संपत्ति पथों के लिए हैश जोड़ना संपत्ति पाइपलाइन का एक डिफ़ॉल्ट हिस्सा है।

उत्पादन में, रेल ताकि फ़ाइल वेब ब्राउज़र

आप संपत्ति पाइपलाइन here में फिंगरप्रिंटिंग के बारे में अधिक पढ़ सकते हैं द्वारा कैश किया गया है प्रत्येक फ़ाइल नाम में एक MD5 फ़िंगरप्रिंट सम्मिलित करता है। रेल संपत्तियों को संकलित करने के लिए Sprockets का उपयोग करता है। फिंगरप्रिंटिंग स्प्राकेट प्रक्रिया के हिस्से के रूप में आता है।

आप Sprockets::BundledAsset उदाहरण प्राप्त करने के लिए अपनी संपत्ति के लॉजिकल पथ में गुज़रने वाले स्प्राकेट्स find_asset विधि का उपयोग कर सकते हैं। उदाहरण

[1] pry(main)> Rails.application.assets.find_asset('application.js') 
=> #<Sprockets::BundledAsset:0x3fe368ab8070 pathname="/Users/deefour/Sites/MyApp/app/assets/javascripts/application.js", mtime=2013-02-03 15:33:57 -0500, digest="ab07585c8c7b5329878b1c51ed68831e"> 

के लिए आप इसे MD5 राशि संपत्ति के साथ जोड़ दिया है प्राप्त करने के लिए इस वस्तु पर digest_path कॉल कर सकते हैं।

[1] pry(main)> Rails.application.assets.find_asset('application.js').digest_path 
=> "application-ab07585c8c7b5329878b1c51ed68831e.js" 
इस ज्ञान आप आसानी से अपने .js.erb फ़ाइलों के भीतर से इस सहायक अपने आवेदन में किसी भी संपत्ति के लिए digest_path लौटने के लिए, और कॉल करने के लिए एक सहायक बना सकते हैं के साथ

+0

find_asset विधि वही है जो मैं ढूंढ रहा था और नहीं मिला। आपका बहुत बहुत धन्यवाद! –

+0

डायजेस्ट पथ वास्तविक फ़ाइल नाम में से एक से अलग क्यों है? – rardoz

2

यह एक पुरानी सवाल है, लेकिन ऐसा लगता है कि आजकल आप उपयोग कर सकते assets_manifest:

Rails.application.assets_manifest.assets["application.css"] => "application-46ae33e78e504ff295219f41d63c79719d062e48dc0c07bd9b6f7bcad72c6636.css"

अधिक यहाँ चर्चा:। https://github.com/rails/sprockets-rails/issues/311