2010-11-01 11 views
15

मैं एक वर्ग ConstData है:रेल 3 autoload

class ConstData 

    US_CITIES = ['miami', 'new york'] 

    EUROPERN_CITIES = ['madrid', 'london'] 

end 

इसके /lib/const_data.rb के तहत संग्रहीत

विचार है एक मॉडल, नियंत्रक अंदर या देखने मैं ऐसा कर सकते हैं:

ConstData::US_CITIES US_CITIES पाने के लिए आदि

रेल स्वचालित रूप से इस वर्ग को लोड करना चाहिए, मैं से यह मिल गया: http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/662abfd1df9b2612?hl=en

हालांकि यह काम नहीं करता है। क्या कोई मुझे समझा सकता है कि इसे कैसे पूरा किया जाए?

उत्तर

48

पोस्ट @ डैनियल का नाम 2008 से है। तब से रेल बदल गई है।
वास्तव में, हाल ही में। Rails3 स्वचालित रूप से lib/निर्देशिका लोड नहीं करता है।

हालांकि आप इसे आसानी से पुनः सक्रिय कर सकते हैं। ओपन config/application.rb और config (Application कक्षा में) में, जोड़ने followin:

config.autoload_paths += %W(#{config.root}/lib) 

फिर अपने lib/dir autoloaded कर दिया जाएगा।

+0

धन्यवाद महोदय, मैं 6 मिनट में यह स्वीकार करेंगे। वैसे भी आप मुझे यह भी बता सकते हैं कि अपने ऑटोलोड लोड में क्या है? – daniel

+2

<< आपका आवेदन >> :: Application.config.autoload_paths –

+5

चेतावनी!आपके पास/lib में कई प्रकार के मॉड्यूल हो सकते हैं जो प्रारंभिकरण में कॉन्फ़िगरेशन जानकारी सेट करते हैं, और मॉड्यूल को फिर से लोड होने पर कॉन्फ़िगरेशन जानकारी को छोड़ दिया जाएगा, जिससे परीक्षण और उत्पादन में ठीक काम करने वाली चीजों के विकास में अयोग्य विफलताएं आती हैं। उस समाधान का समाधान config.autoload_paths के बजाय config.autoload_once_paths में/lib पथ जोड़ रहा है। –

2

config.autoload_paths मेरे लिए काम नहीं किया। मैं ApplicationController में निम्नलिखित रख कर इसे हल:

Dir["lib/**/*.rb"].each do |path| 
    require_dependency path 
end 
12

कारण autoload_paths आप के लिए काम नहीं किया और तुम क्या करने के लिए मजबूर किया गया:

Dir["lib/**/*.rb"].each do |path| 
    require_dependency path 
end 

है क्योंकि आपने अपनी कक्षा के नाम स्थान भूल

lib/भयानक/stuffs.rb एक वर्ग/मॉड्यूल इस तरह शामिल करना चाहिए:

class/module Awesome::Stuffs 
.... 

लेकिन आप था:

class/module Stuffs 
.... 

रेल केवल autoload वर्गों और मॉड्यूल जिसका नाम से मेल खाता है यह फ़ाइल पथ और फ़ाइल का नाम।

:)

+0

अच्छा। इसने पहले उल्लेख नहीं किया था और मुझे कई समस्याएं आईं। लोड पथ के लिए मिलान करने के लिए यदि मेरे पास मॉड्यूल नाम के रूप में एक कंपाउंड संज्ञा है तो मुझे क्या करना चाहिए? (यानी lib/monkey_man/engine.rb -> मॉड्यूल बंदरमान :: इंजन?) क्या यह स्वचालित रूप से कैमल केस करता है? – Vivek

1

lib dir के लिए समाधान का पालन करें autoloaded जा:

development.rb और production.rb से निकालें config.threadsafe!;

config/application.rb में जोड़ें:

config.autoload_paths += %W(#{config.root}/lib) 
config.threadsafe! 
config.dependency_loading = true 
+0

धन्यवाद। मैंने बुराई_पीडीएफ को काम करने की कोशिश करने के लिए परिवर्तनों की झुकाव में 'confing.threadsafe!' जोड़ा था और यही वजह है कि मेरा ऑटो लोड काम करना बंद कर दिया। – TheRightChoyce