मैं एक रेल इंजन विकसित कर रहा हूं, और इसलिए मैंने मौजूदा लोगों पर कुछ नजर डाली हैं। मैंने देखा कि उनमें से कई में app
में फ़ाइलें हैं, लेकिन lib
और vendor
में भी फ़ाइलें हैं।रेल इंजन: ऐप में कोड कब रखना है, कब lib में, और जब विक्रेता फ़ोल्डर में?
यह मेरे लिए स्पष्ट है कि मैं किसी भी कोड है कि app
फ़ोल्डर में मेजबान एप्लिकेशन द्वारा बदली होना चाहिए (उदाहरण के लिए जब एक मॉडल app/user.rb
होने, मेजबान एप्लिकेशन आसानी से अपने स्वयं के app/user.rb
फ़ाइल है और बजाय इस एक का उपयोग कर सकते रखना चाहिए है इंजन एक है)।
लेकिन मुझे यकीन नहीं है, जब मुझे lib
में सामान रखना होगा, और जब vendor
में? मैंने सोचा, कि vendor
में, मुझे केवल अन्य परियोजनाओं या परियोजनाओं से "बाहरी" कोड डालना चाहिए, जिसे मैं अपने प्रोजेक्ट में उपयोग करना चाहता हूं, और lib
में मैंने अपनी अतिरिक्त पुस्तकालयों को रखा है जो मैं वास्तव में इस परियोजना में काम कर रहा हूं। लेकिन, उदाहरण के लिए, क्या वाइसग्रिड ने wice_grid/vendor/assets निर्देशिका में सामान डाला है? यह मुझे बाहरी कोड की तरह नहीं देखता है, लेकिन कोड जो केवल वाइसग्रिड के लिए विकसित किया गया है और इसलिए lib
निर्देशिका में होना चाहिए?
अद्यतन
जबकि एक सा प्रयोग, मैंने देखा कि lib
फ़ोल्डर में सभी कोड पुनः लोड नहीं है, जबकि इंजन के विकास (मैं एक ही लगता है vendor
निर्देशिका के लिए मामला है), तो मैं रखना चाहिए उन्हें app
के भीतर एक फ़ोल्डर में, लेकिन वास्तव में कहां?
उदाहरण के लिए, मैं एक फ़ाइल lib/iq_list_controller.rb
कि ApplicationController
के लिए कुछ वर्ग और उदाहरण तरीकों जो मैं इस पर मिश्रण engine.rb
इस तरह में धारण:
initializer "wice_grid_railtie.configure_rails_initialization" do |app|
ActiveSupport.on_load(:action_controller) do
extend IqList::Controller::ClassMethods
include IqList::Controller::InstanceMethods
end
end
तो रूबी ठीक से यह पाता है कहाँ मैं इस फ़ाइल रखना चाहिए?
module MyEngine
class Engine < ::Rails::Engine
config.autoload_paths << File.expand_path("../../lib", __FILE__)
end
end
विक्रेता संपत्ति के विशेष मामले के संबंध में, यह: