यह समझाने के लिए एक मुश्किल है। तो फिरउस फ़ाइल में परिभाषित होने के बावजूद रेल फ़ाइल से निरंतर स्वत: लोड करने में असमर्थ
# app/models/points/calculator.rb
module Points
module Calculator
def self.included(base)
base.send(:include, CommonMethods)
base.send(:include, "Points::Calculator::#{base}Methods".constantize)
end
end
end
अन्य वर्गों में सब मैं क्या करने की जरूरत है: मैं बहुत की तरह एक और मॉड्यूल नाम स्थान में एक मॉड्यूल है
class User
include Points::Calculator
end
मैं application.rb में इस निर्देशिका में निर्दिष्ट किया है autoloadable होने के लिए ... (भले ही मुझे लगता है कि रेल मॉडल के माध्यम से रिकर्स ...)
config.autoload_paths += Dir[ Rails.root.join('app', 'models', "points") ]
विकास एनवी में, सब कुछ ठीक काम करता है। जब परीक्षण (और उत्पादन env) चल रहा है, मैं निम्नलिखित त्रुटि मिलती है:
Unable to autoload constant Points::Calculator, expected /Users/pete/work/recognize/app/models/points/calculator.rb to define it (LoadError)
मैं वास्तव में यहाँ सलाह का पालन समस्या को ठीक करने: स्पष्ट रूप से application.rb में calculator.rb की आवश्यकता द्वारा Stop Rails from unloading a module in development mode।
हालांकि, यह क्यों हो रहा है ??
मैंने ActiveSupport की निर्भरताओं.आरबी फ़ाइल में कुछ डीबग आउटपुट फंस लिया और देखा कि इस फ़ाइल को दो बार जरूरी है। पहली बार इसकी आवश्यकता है कि मैं देख सकता हूं कि स्थिर वास्तव में लोड किया गया है।
लेकिन दूसरी बार इसकी आवश्यकता होती है जब तक रेल बता सकते हैं, लेकिन जब वास्तविक आवश्यकता को बुलाया जाता है, तो रूबी झूठी वापसी करता है क्योंकि रूबी जानता है कि इसकी पहले से ही आवश्यकता है। फिर रेल "निरंतर स्वत: लोड करने में असमर्थ" त्रुटि फेंकता है क्योंकि स्थिर अभी भी मौजूद नहीं है और रूबी को फ़ाइल की "पुनः आवश्यकता" नहीं है।
क्या कोई इस पर प्रकाश डाल सकता है कि यह क्यों हो रहा है?
ऑटोलोड करने योग्य पथों के खोने से अंक हटाने में मदद मिलती है? यह आवश्यक नहीं होना चाहिए –
हां, मैंने इसे ऑटोलोड लोड पथ के साथ और बिना कोशिश की है। एक ही समस्या है। –
एक ही समस्या होने के लिए लगता है। कक्षा की आवश्यकता होने के लिए बहुत परेशान होना, क्योंकि मेरे पास लगभग 30+ ऐसे वर्ग हैं। – Kohanz