2009-07-21 14 views
5

मैं एक प्लगइन के रूप में रेल के लिए एक इंजन पर काम कर रहा हूं। मैं इसे लोड होने पर रेल की कॉन्फ़िगरेशन में आवश्यक परिवर्तन करने में सक्षम होना चाहता हूं ताकि यह अपनी जेम निर्भरताओं को निर्दिष्ट कर सके और कुछ लोड पथ जोड़ सके।मैं इंजन प्लगइन के भीतर रेल की कॉन्फ़िगरेशन को कैसे संशोधित कर सकता हूं?

प्लगइन की init.rb फ़ाइल में कॉन्फ़िगरेशन ऑब्जेक्ट तक पहुंच है लेकिन यह प्रभावी रूप से केवल पढ़ने के लिए है, आप एक मणि निर्दिष्ट कर सकते हैं लेकिन इससे कोई फर्क नहीं पड़ता है, प्रारंभकर्ता को इस बिंदु पर पहले ही चलाना होगा।

मैं बहुत की तरह एक नई रेल के साथ एक फ़ाइल :: प्रारंभकर्ता ब्लॉक की आवश्यकता द्वारा अभी के लिए इस के आसपास मिल गया है:

Rails::Initializer.run do |config| 
    config.gem "authlogic", :version => ">= 2.0.9" 
    # etc 
end 

यह काम करता है लेकिन मुख्य आवेदन के environment.rb में किसी भी मौजूदा विन्यास का सफाया।

शायद मैं इंजन में जेनरेटर रखकर इसे हल कर सकता हूं जो पर्यावरण में कुछ जोड़ता है। आरबी जो सही चरण में प्लगइन की कॉन्फ़िगरेशन लोड करता है, या हो सकता है कि यह करने के लिए कॉन्फ़िगर/प्रारंभकर्ताओं को फ़ाइल जोड़ने का एक तरीका हो काम। यह सुनिश्चित नहीं है कि इस बारे में सबसे अच्छा कैसे जाना है।

उत्तर

1

मैं कॉन्फ़िगर/प्रारंभकर्ता मार्ग के साथ जाऊंगा। प्लगइन-विशिष्ट कॉन्फ़िगरेशन कोड डालने के लिए यह मानक फ़ोल्डर है और यह सही समय पर लोड हो जाएगा।

कार्यान्वयन के लिए, मैं उन सभी चीजों के लिए समझदार डिफ़ॉल्ट चुनने के लिए अपनी सबसे कठिन कोशिश करता हूं जो मुझे कॉन्फ़िगर फ़ाइल नहीं देते हैं। (मैं समझता हूँ कि यह हमेशा संभव नहीं है।)

अगला मुझे लगता है कि स्वचालित रूप से उपयोग कर रहा config/initializers में कॉन्फ़िग फ़ाइल बनानी होगी प्लगइन के साथ एक जनरेटर बनाने होगा:

./script/generate plugin MyPlugin --with-generator 

अंत में, मैं डाल प्लगइन स्थापित होने पर जेनरेटर स्क्रिप्ट चलाने के लिए मेरी प्लगइन के install.rb में कुछ। इस तरह कॉन्फ़िगरेशन फ़ाइल को इंस्टॉल के साथ स्वचालित रूप से जेनरेट किया जाता है, और यदि उपयोगकर्ता डिफ़ॉल्ट कॉन्फ़िगरेशन को पुनर्स्थापित करना चाहता है तो उपयोगकर्ता को पुन: उत्पन्न करने का एक आसान तरीका है।

+0

जो मुझे करने के लिए एक अच्छा दृष्टिकोण की तरह लगता है। वातावरण में कॉन्फ़िगरेशन फ़ाइलों के विपरीत (development.rb इत्यादि।) कॉन्फ़िगर/प्रारंभकर्ताओं में फ़ाइलों को कॉन्फ़िगरेशन ऑब्जेक्ट तक पहुंच नहीं है, क्या आपको पता है कि मैं इस स्थिति में मणि निर्भरताओं को कैसे निर्दिष्ट करूं? धन्यवाद – DavidNorth

+0

अब तक ऐसा करने का एकमात्र तरीका यह है कि मैं अपने इंजन से एक स्ट्रिंग के रूप में एक फाइल लोड कर रहा हूं और इसे Rails :: Initializer ब्लॉक में पर्यावरण.आरबी में से बाहर निकालना है ताकि फाइल को 'config' 'और config.gem eval (file.read ("# {RAILS_ROOT} /vendor/plugins/my-engine/config/gems.rb") को कॉल करने में सक्षम हो) यह बहुत बदसूरत है लेकिन ऐसा लगता है कि यह आपके जैसा लगता है उस ब्लॉक के बाहर मणि निर्भरताओं को निर्दिष्ट न करें। मुझे लगता है कि मेरा जेनरेटर उस ब्लॉक के भीतर प्रासंगिक लाइनों को जोड़ सकता है लेकिन मैं इंजन की आवश्यकताओं को यथासंभव अलग रखना चाहता हूं। – DavidNorth

0

आप आसानी से (अपने प्लगइन निर्देशिका के अंतर्गत) init.rb को यह पंक्ति जोड़ सकते हैं

config.gem 'quick_magick' 

मैं रेल 2.3.5 के साथ की कोशिश की और यह जादू की तरह काम किया।

1

क्या आप वाकई इसे मणि की बजाय प्लगइन के रूप में वितरित करना चाहते हैं? यदि आप अपने इंजन को मणि के रूप में पैकेज करते हैं तो आप अपने मणि निर्माण प्रक्रिया के हिस्से के रूप में मणि निर्भरता निर्दिष्ट कर सकते हैं। उदाहरण के लिए, अगर आप अपने मणि बनाने के लिए जौहरी का उपयोग आप बस एक ही पंक्ति जोड़ें:

s.add_dependency 'authlogic'

जब आपके मणि स्थापित किया गया है यह सुनिश्चित करें कि सभी निर्भरता स्थापित कर रहे हैं कर देगा। एक पूर्ण ज्वैलर कॉन्फ़िगरेशन उदाहरण के लिए Google 'जौहरी मणि निर्भरता'।

इसके अलावा, मैं अपने खुद के रेल इंजन पर बहुत काम कर रहा हूं और हाल ही में बहुत उपयोगी आधार कार्यक्षमता निकाली है। आप अन्य इंजन समस्याओं के लिए इस लिए उपयोगी हो सकते:

http://keithschacht.com/creating-a-rails-3-engine-plugin-gem/

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

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