2014-06-16 6 views
24

मैं एक निश्चित मॉड्यूल जो एक रेल 4.1.1 आवेदनकई परिभाषित नहीं किया जा सकता 'शामिल' cache_classes के साथ एक चिंता के लिए ब्लॉक (ActiveSupport :: चिंता :: MultipleIncludedBlocks) = सच

module A 
    extend ActiveSupport::Concern 
    included do 
    #Some code 
    end 
end 

में इस्तेमाल किया जाता है जो एक वर्ग

class Some 
    include A 
end 

यह application.rb में cache_classes=true साथ अच्छा काम करता है में शामिल थे। अब, अगर मैं कक्षाओं के कैशिंग को बंद करता हूं, तो मुझे सर्वर से Cannot define multiple 'included' blocks for a Concern (ActiveSupport::Concern::MultipleIncludedBlocks) अपवाद अप्ससन मिल जाता है।

कक्षाओं को फिर से लोड करने के बाद से इस तरह के किसी मुद्दे से कैसे निपटना चाहिए रेल द्वारा किया जाता है?

उत्तर

37

किसी भी दीवार को पढ़ने के लिए मारने के लिए, इसका समाधान रेलों के ऑटोलोडिंग नियमों का सख्ती से सम्मान करना है। यही कारण है कि

  1. सभी की आवश्यकता होती है/require_relative
  2. जोड़ें जरूरत पथ निकाला जा रहा है सही नाम के साथ सही स्थानों पर autoload रास्तों
  3. रखें फ़ाइलों रेल ताकि रेल जहां लोड करने के लिए कोड के लिए देखने के लिए अनुमान लगा सकते हैं है।

अधिक यहाँ जानकारी: https://github.com/rails/rails/issues/15767

+1

धन्यवाद थोड़ी देर के लिए यह नीचे शिकार करने के लिए कोशिश कर रहा। मैंने एक चिंता में एक lib को दोबारा प्रतिक्रिया दी थी और इस त्रुटि को –

+0

प्राप्त करने के लिए प्रोजेक्ट के लिए, मॉड्यूल स्पष्ट रूप से एक फ़ाइल में (ऑटोलोड लोड होने के शीर्ष पर) आवश्यक था। साइडकीक का उपयोग करते समय हमने यह समस्या शुरू कर दी। समाधान मॉड्यूल को स्पष्ट कॉल को हटा रहा था। –

+1

मुझे भी एक मुद्दा था जहां मेरे मॉड्यूल/नेमस्पेस नाम में से एक का नाम समाप्त हो गया था, और मेरा मानना ​​है कि यह रेल के बहुवचन के साथ अच्छी तरह से खेल नहीं रहा है, क्योंकि मॉड्यूल को सिंगलर फॉर्म में काम करने के लिए बस नामित किया गया है। –

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