2012-10-04 9 views
10

मैं एक रेल इंजन विकसित कर रहा हूं, और इसलिए मैंने मौजूदा लोगों पर कुछ नजर डाली हैं। मैंने देखा कि उनमें से कई में 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 

विक्रेता संपत्ति के विशेष मामले के संबंध में, यह:

उत्तर

6

विकास के मुद्दे को फिर से लोड के बारे में, अगर lib फ़ोल्डर आपकी फ़ाइलों के लिए एक प्राकृतिक घर है, तो यह रेल 'लोड पथ के लिए की तरह कुछ के साथ जोड़ने ऐप/संपत्ति में अपने इंजन की संपत्ति रखने के लिए उचित लगता है, जहां वे मेजबान रेल ऐप द्वारा पाए जाएंगे।

2

यदि आप चीजों को स्वत: लोड करना चाहते हैं तो उन्हें /app में रखें। अन्यथा मुझे लगता है कि /lib में कुछ भी मैन्युअल रूप से आवश्यक होना चाहिए। मुझे आम तौर पर विश्वास है कि lib फ़ोल्डर को स्वत: लोड करना बुरा अभ्यास है।

1

एमवीसी के लिए आपका मूल कोड ऐप फ़ोल्डर में आता है। अब मान लें कि आपके पास एक सामान्य विधि/मॉड्यूल है जिसका उपयोग अक्सर किया जाता है, ताकि आपके कोड के लिए ड्रवाईनेस लागू किया जा सके ... सभी जेनेरिक और सामान्य उपयोगिताओं को केवल lib फ़ोल्डर में रखा जा सकता है ।

एक सुंदर व्याख्या when to use lib और using lib folder in rails

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