2011-09-26 7 views
14

मैंने अपनी जावास्क्रिप्ट फ़ाइलों को दो निर्देशिकाओं में व्यवस्थित किया है और मुझे निम्न अजीब व्यवहार मिला है। यह देखते हुए निम्नलिखित पेड़:रेल 3.1: जावास्क्रिप्ट विक्रेता/संपत्ति निर्देशिका से सही ढंग से परोसा नहीं गया है?

+ app 
    + assets 
    + javascripts 
     + common 
     + public 
     + common 
     + home 
      - home.js 

home.js इस तरह दिखता है:

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_directory ../../jquery_plugins 
//= require_directory ../../common 
//= require_directory ../common 
//= require_self 

अब चाल jquery_plugins निर्देशिका में निहित है। मैंने इसे vendor/assets/javascripts के अंदर रखा (जिसे एसेट लोड पथ में शामिल किया गया है, जब मैं Rails.application.config.assets.paths जांचता हूं)। जब मैं ऐसा करता हूं तो मुझे त्रुटि मिलती है: require_tree argument must be a directory। जब मैं उस निर्देशिका को app/assets/javascripts पर ले जाता हूं तो सब कुछ काम करता है।

क्या किसी के पास कोई संकेत है कि मैं क्या गलत कर रहा हूं? या यह एक बग है?

उत्तर

12

मुझे एक ही समस्या थी। मुझे अभी भी यकीन नहीं है कि यह एक बग या जानबूझकर व्यवहार है, लेकिन ऐसा लगता है कि Rails.application.config.assets.paths केवल एकल फ़ाइलों के लिए काम करता है, यानी require jquery और इसी तरह। स्पष्ट रूप से संपत्ति लोड पथ का उपयोग केवल require के लिए सर्वश्रेष्ठ मिलान को वापस करने के लिए किया जाता है लेकिन require_directory या require_tree के लिए नहीं।

मेरे मामले में, vendor/assets/javascripts से सभी फाइलों को लोड करने के लिए, मैं करने के लिए निम्न जोड़ने के लिए किया था मेरी app/assets/javascripts/application.js:

//= require_tree ../../../vendor/assets/javascripts/. 

इस तरह अपने मामले कुछ में काम करना चाहिए:

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_directory ../../../../../vendor/assets/javascripts/jquery_plugins 
//= require_directory ../../common 
//= require_directory ../common 
//= require_self 

ऐसा लगता है कि आपको हमेशा उस फ़ाइल से संबंधित पथ का उपयोग करना होगा जहां आप require_directory या require_tree पर कॉल कर रहे हैं।

इसके अलावा, मैं जे एस-संपत्ति की संरचना पर इस चर्चा उपयोगी हो पाया: Rails 3.1 asset pipeline and manually ordered Javascript requires

+0

हाँ, स्टाइलशीट के लिए '* = requ_tree ../../../ विक्रेता/संपत्ति/स्टाइलशीट/.' के साथ जाता है। – LearningRoR

27

आप निर्देशिका आप की तरह कुछ के साथ सेवा करने के लिए कोशिश कर रहे हैं करने के लिए एक मैनिफ़ेस्ट फ़ाइल जोड़ सकते हैं vendor/assets/javascripts/jquery_plugins/manifest.js

//= require_directory . 

और

//= require jquery_plugins/manifest 
के माध्यम से अपने app/assets/javascripts/application.js में यह आवश्यकता होती है इस

आप वास्तव में उदाहरण vendor/assets/javascripts/bootstrap के लिए पुस्तकालय के बाद और कहा कि एक ही फ़ोल्डर में नाम का एक फ़ोल्डर में अपने सभी एकल पुस्तकालय संबंधित फाइलों रख सकते हैं एक index.js जोड़ने के लिए @LeEnno करने के लिए 10 संपादित करें (यहां तक ​​कि सरल तरीके से)

धन्यवाद जो अपने प्रकट रूप में कार्य करेगा और रेल स्वचालित रूप में यदि आपके

app/assets/javascripts/application.js 

आप पंक्ति जोड़ें इसे

ले जाएगा

//= require bootstrap 

इतना आसान !!!
Rails Asset Pipeline Guide

+0

मैं अभी भी ऐसा कर रहा हूं इसलिए यदि नकारात्मक वोटों का कोई कारण है, तो मुझे कुछ प्रतिक्रिया पसंद आएगी। – mraaroncruz

+3

ऊपर मतदान के मुकाबले क्लीनर ... लोगों के साथ क्या गलत है – Plattsy

+0

यह साफ दिखता है, मुझे यह पसंद है। मुझे ऐसा करने में संकोच नहीं है, हालांकि, क्योंकि मुझे विक्रेता में * केवल * विक्रेता कोड होना पसंद है, ताकि अगर मैं वहां सामान बदल रहा हूं या अपडेट कर रहा हूं तो मुझे लिखने वाले कोड को ओवरराइट करने की चिंता करने की ज़रूरत नहीं है । मुझे संदेह है कि इसी तरह की सोच है कि (पूर्व?) डाउनवॉट्स से आया था। – jpadvo

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