मैं /lib
विकास के दौरान अपनी निर्देशिका में ऑटोलॉड कोड के लिए इनिशियलाइज़र में निम्न लाइन का उपयोग करता हूं :
config / initializers / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
( रेल 3 Quicktip से: विकास मोड में ऑटो पुनः लोड करने योग्य फ़ोल्डर )
यह बहुत अच्छा काम करता है, लेकिन यह उत्पादन में उपयोग करने के लिए बहुत ही अक्षम है- प्रत्येक अनुरोध पर काम के बोझ को लोड करने के बजाय, मैं उन्हें स्टार्ट अप पर लोड करना चाहता हूं। उसी ब्लॉग में ऐसा करने का वर्णन करने वाला एक और लेख है :
config / application.rb:
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
हालांकि, जब मैं उस पर स्विच करता हूं, तो विकास में भी, मुझे काम के कार्यों का उपयोग करने की कोशिश करते समय NoMethodErrors मिलता है।
मेरी एक लीब फाइल का उदाहरण:
lib / extensions.rb:
Time.class_eval do
def self.milli_stamp
Time.now.strftime('%Y%m%d%H%M%S%L').to_i
end
end
कॉलिंग Time.milli_stamp
NoMethodError फेंक देगा
मुझे लगता है कि अन्य लोगों ने एसओ पर इसी तरह के सवालों के जवाब दिए हैं, लेकिन वे सभी नामकरण सम्मेलनों और अन्य मुद्दों से निपटते हैं, जिनके बारे में मुझे पहले चिंता करने की ज़रूरत नहीं थी- मेरे परिश्रमी वर्ग पहले से ही प्रति-अनुरोध लोड करने के लिए काम करते थे, मैं इसे बदलना चाहता हूं प्रति करने के लिए- स्टार्टअप लोड हो रहा है। ऐसा करने का सही तरीका क्या है?