2014-04-09 8 views
44

जोड़ें मैंने 4.1.rc2 से रेलवे 4.1.0 पर अपना आवेदन माइग्रेट किया। मेरी जे एस फ़ाइलेंसंपत्ति फ़िल्टर की गई और सेवा नहीं की जाएगी: `config.assets.precompile

ActionView::Template::Error: Asset filtered out and will not be served: add `config.assets.precompile += %w(my_js)` to `config/application.rb` and restart your server 
+3

आपका स्वागत है! अब आप दुर्घटनाओं से भले ही टैग बना सकते हैं। कृपया * हमेशा * स्वत: पूर्ण मेनू से चयन करना सुनिश्चित करें! – Charles

उत्तर

51

रेल 4.1 में sprockets_better_errors मणि से Heroku से आग्रह, रेल देखरेख विलय कर दिया है विवेक चेकों का जवाब देते के लिए इन त्रुटियों को हो रही शुरू कर दिया। देखें https://github.com/rails/sprockets-rails/pull/84

यह उद्देश्य संपत्ति पाइपलाइन त्रुटियों को प्रकट करना है जो आप विकास मोड में ऐप चलाने पर उत्पादन में देखेंगे।

आप शायद अपनी जावास्क्रिप्ट फ़ाइलों को ऐप/संपत्ति/जावास्क्रिप्ट/ फ़ोल्डर में रखने के बजाय एक एप्लिकेशन लेआउट में javascript_include_tag का उपयोग कर रहे हैं।

आप अपनी फ़ाइलों को ऐप/संपत्ति/जावास्क्रिप्ट/ फ़ोल्डर में ले जा सकते हैं। कि फ़ाइल नाम .js फ़ाइल एक्सटेंशन शामिल नहीं होना चाहिए

config.assets.precompile += %w(my_js) 

नोट:

फिर, आप अपने config/application.rb फ़ाइल अद्यतन करने के लिए शामिल करने के लिए की आवश्यकता होगी।

+42

यह एक अच्छा कारण नहीं है। हर कोई Heroku का उपयोग नहीं करता है और यह वास्तव में मुझे समस्याओं का कारण बनता है। हमें विकास में हमारी कस्टम .js या .css फ़ाइलों को प्रीकंपाइल नहीं करना चाहिए।यही कारण है कि हमारे पास पहले स्थान पर विकास मोड क्यों है। –

+1

क्या आप बस जेएस फ़ाइल को संपत्ति पाइपलाइन में नहीं जोड़ सकते हैं: // = आधुनिकता – JustinParker

+0

की आवश्यकता है क्या आपको फ़ाइल एक्सटेंशन की आवश्यकता नहीं है? 'my_js'' my_js.js' का नाम होगा? मैंने सोचा कि आप मैनिफेस्ट का उपयोग कर सकते हैं। आप 'config.assets.precompile + =% w (my_js)' क्यों करेंगे जब आप इसे मैनिफेस्ट में सूचीबद्ध कर सकते हैं? – ahnbizcad

30

यदि आपने अपने एप्लिकेशन लेआउट हेडर में stylesheet_link_tag params[:controller] जैसे कुछ जोड़ा है, क्योंकि आपके पास अलग-अलग नियंत्रकों पर अलग जेएस अनुप्रयोग हैं लेकिन एक ही मूल लेआउट के साथ, आप इससे काफी नाराज होंगे। त्वरित तरीका यह खत्म होने और /config/initializers/assets.rb के लिए निम्न जोड़ने के लिए काम (लेकिन शायद नहीं एक अंतिम समाधान) सभी परिसंपत्तियों precompiled साथ है जारी रखने के लिए:

Rails.application.config.assets.precompile += [/.*\.js/,/.*\.css/] 

ध्यान दें कि यह यह के रूप में है .js.coffee और .css.scss, .js और .css के लिए भी पर्याप्त है।

+0

महान टिप के लिए धन्यवाद, यह काम करता है! – Gediminas

+0

धन्यवाद! वास्तव में महान समाधान। मुझे आश्चर्य है कि इसका उपयोग स्पॉकेट में डिफ़ॉल्ट रूप से क्यों नहीं किया जाता है? – Dimitry

+3

@ डिमिट्री, ऐसा इसलिए है क्योंकि प्रीकंपिलेशन का पूरा विचार एक फ़ाइल में कुछ उद्देश्यों के लिए आवश्यक सभी फ़ाइलों को शामिल करना है। इसलिए केवल आपकी 'शीर्ष स्तर' फ़ाइलों को इस सूची में शामिल किया जाना चाहिए, और उन्हें '// = आवश्यकता ...' निर्देशों का उपयोग स्वयं को शामिल करने के लिए करना चाहिए। उपरोक्त मेरा समाधान विकास में मदद करता है, लेकिन यदि आप 'रेक संपत्ति: प्रीकंपाइल' जैसी कुछ करते हैं तो आप उन फ़ाइलों की एक बड़ी गड़बड़ी के साथ समाप्त हो जाएंगे जिन्हें कभी भी सेवा करने की आवश्यकता नहीं है। उदाहरण के लिए, यदि आपके पास एक कोणीय प्रोजेक्ट है जहां प्रत्येक निर्देश/नियंत्रक/टेम्पलेट एक अलग फ़ाइल है, तो आप आसानी से 100+ फाइलें प्राप्त कर सकते हैं ... – zmilojko

4

आदर्श रूप में @zilojko समाधान काम करता है लेकिन मैं यह भी .. इस ऐप्लिकेशन में सक्रिय उपयोगकर्ता होना इसलिए थोड़ा और आगे देखने के बाद मैं निम्नलिखित समाधान नहीं मिला:

Rails.application.config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico) 
Rails.application.config.assets.precompile << /\A(?!active_admin).*\.(js|css)\z/ 

बस के ऊपर पंक्तियां जोड़ें:/config/प्रारंभकर्ता/संपत्ति.आरबी

सक्रिय व्यवस्थापक फ़ाइलों को छोड़ते समय प्रीकंपाइल संपत्तियों के ऊपर कोड। ताकि वे दो बार या बदले में संसाधित नहीं हो सकें जिससे त्रुटियां आती हैं।

3

हाँ, ब्राउज़र पर त्रुटि पढ़ने, सभी मैंने किया था कोड की निम्न पंक्ति जोड़ने था: /config/initializers/assets.rb फ़ाइल के लिए

Rails.application.config.assets.precompile += %w(depot.css) 

और यह काम किया।

+0

यह मेरे लिए भी काम करता है – Megha

0

आप अपने ERB से <%= javascript_include_tag 'xxx' %> detele सकता है, और आप assets/javascript/name_space/index.js.coffee में, 1500 प्रतिष्ठा स्तर को संलग्न इस

#= require ./xxx 
संबंधित मुद्दे