2012-07-18 18 views
6

संपत्ति पाइप लाइन के विषय पर, रेल गाइड का सुझाव बस को फोन करके कहा कि रेल विशिष्ट सीएसएस फ़ाइलें नियंत्रक को लिंक कर सकते हैं:Rails3 संपत्ति पाइपलाइन: नियंत्रक विशिष्ट शैली

stylesheet_link_tag params[:controller] 

रेल गाइड से अंश:

उदाहरण के लिए, यदि आप प्रोजेक्ट कंट्रोलर उत्पन्न करते हैं, तो रेल ऐप/संपत्ति/जावास्क्रिप्ट/projects.js.coffee पर एक और नई ऐप/संपत्ति/स्टाइलशीट/projects.css.scss पर एक नई फ़ाइल भी जोड़ देगा। आपको किसी भी जावास्क्रिप्ट या सीएसएस को अपनी संबंधित परिसंपत्ति फ़ाइलों के अंदर एक नियंत्रक के लिए अद्वितीय रखना चाहिए, क्योंकि इन फ़ाइलों को केवल <% = javascript_include_tag पैराम्स [: नियंत्रक]%> या <% = stylesheet_link_tag पैराम्स जैसे लाइनों के साथ इन नियंत्रकों के लिए लोड किया जा सकता है [ : नियंत्रक]%>। http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline

यही विकास है जहाँ हम रेल संपत्ति पाइपलाइन पर वापस गिर करने के लिए अनुमति में बस ठीक काम करता है। उत्पादन में, हालांकि, मुझे यह कहते हुए एक त्रुटि मिल रही है कि स्टाइलशीट प्रीकंपल नहीं है।

से मैं क्या पढ़ा है, आप किसी भी संपत्ति है कि आप इस तरह precompile सरणी के रूप में स्वतंत्र फ़ाइलें प्रकट करना चाहते हैं जोड़ने के लिए:

config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js'] 

अगर मैं नियंत्रक विशिष्ट शैली है कि के रूप में जुड़े हुए हैं चाहते हैं ऊपर रेल गाइड उदाहरण के अनुसार, क्या मुझे प्रीकंपाइल सरणी में प्रत्येक को गिनना है?

उत्तर

6

संक्षिप्त उत्तर है ... हाँ।

हालांकि, याद रखें कि संपत्ति पाइपलाइन का चयन चयनकर्ताओं से मेल खाने के लिए भी किया जा सकता है। मैंने एक साधारण सीएमएस के लिए एक समान सेटिंग लागू की जहां मुझे पता था कि मैं चाहता हूं कि प्रत्येक नियंत्रक के पास अपना स्वयं का .css और .js हो। config लगता है कि ...

config.assets.precompile += ["*.css", "*.js") 

नहीं सबसे अच्छा समाधान अगर आप स्टाइलशीट या स्क्रिप्ट कि सीधे नियंत्रकों से संबंधित नहीं हैं की आवंटित किया है। मेरे मामले में प्रत्येक नियंत्रक को बहुत अलग .js फ़ाइलों की आवश्यकता होती है।

इसके अलावा, यदि आपकी अलग-अलग संपत्तियों को दो या तीन अंतर-संबंधित समूहों में समूहीकृत किया जा सकता है, तो आप कई प्रकटताओं को बनाने पर विचार कर सकते हैं और फिर उन्हें स्पष्ट रूप से सूचीबद्ध कर सकते हैं।

संपादित मैं किसी को जो कैसे अपने परिसंपत्ति precompiling स्थापित करने के लिए तय करने के लिए कोशिश कर रहा है के लिए इस उत्तर के दौर करना चाहते हैं।

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

उदाहरण

config.assets.precompile += ['*.css', 'manifests/*.js'] 

के लिए सभी सीएसएस शीट संकलन होता है और केवल प्रकट होता है फ़ोल्डर में फ़ाइलें .js।

इसी प्रकार आप परिसंपत्तियों को पार कर सकते हैं। एक regex precomile। इसलिए यदि आप किसी भी फाइल को "pre_" जोड़ना चाहते हैं जिसे आप प्रीकंपिल्ड करना चाहते हैं तो आप एक मैच का उपयोग कर सकते हैं ...

config.assets.precompile += [/^pre_\w*.(css|js)/i] 

संभावनाएं अनंत हैं, केवल आपके en खा के बाद से सबसे स्क्रिप्ट और सीएसएस कई उदाहरण में और दूसरे के साथ संयोजन के रूप में प्रयोग की जाने वाली लिखा जाना चाहिए, एक शायद बेकार सभी परिसंपत्तियों precompiling के लिए समझौता करने के लिए है नहीं लग रहा है स्क्रिप्ट, या सब कुछ फेंकना, आवेदन में भी अत्यधिक विशिष्ट स्क्रिप्ट। *।

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