मैं एक प्लगइन के रूप में रेल के लिए एक इंजन पर काम कर रहा हूं। मैं इसे लोड होने पर रेल की कॉन्फ़िगरेशन में आवश्यक परिवर्तन करने में सक्षम होना चाहता हूं ताकि यह अपनी जेम निर्भरताओं को निर्दिष्ट कर सके और कुछ लोड पथ जोड़ सके।मैं इंजन प्लगइन के भीतर रेल की कॉन्फ़िगरेशन को कैसे संशोधित कर सकता हूं?
प्लगइन की init.rb फ़ाइल में कॉन्फ़िगरेशन ऑब्जेक्ट तक पहुंच है लेकिन यह प्रभावी रूप से केवल पढ़ने के लिए है, आप एक मणि निर्दिष्ट कर सकते हैं लेकिन इससे कोई फर्क नहीं पड़ता है, प्रारंभकर्ता को इस बिंदु पर पहले ही चलाना होगा।
मैं बहुत की तरह एक नई रेल के साथ एक फ़ाइल :: प्रारंभकर्ता ब्लॉक की आवश्यकता द्वारा अभी के लिए इस के आसपास मिल गया है:
Rails::Initializer.run do |config|
config.gem "authlogic", :version => ">= 2.0.9"
# etc
end
यह काम करता है लेकिन मुख्य आवेदन के environment.rb में किसी भी मौजूदा विन्यास का सफाया।
शायद मैं इंजन में जेनरेटर रखकर इसे हल कर सकता हूं जो पर्यावरण में कुछ जोड़ता है। आरबी जो सही चरण में प्लगइन की कॉन्फ़िगरेशन लोड करता है, या हो सकता है कि यह करने के लिए कॉन्फ़िगर/प्रारंभकर्ताओं को फ़ाइल जोड़ने का एक तरीका हो काम। यह सुनिश्चित नहीं है कि इस बारे में सबसे अच्छा कैसे जाना है।
जो मुझे करने के लिए एक अच्छा दृष्टिकोण की तरह लगता है। वातावरण में कॉन्फ़िगरेशन फ़ाइलों के विपरीत (development.rb इत्यादि।) कॉन्फ़िगर/प्रारंभकर्ताओं में फ़ाइलों को कॉन्फ़िगरेशन ऑब्जेक्ट तक पहुंच नहीं है, क्या आपको पता है कि मैं इस स्थिति में मणि निर्भरताओं को कैसे निर्दिष्ट करूं? धन्यवाद – DavidNorth
अब तक ऐसा करने का एकमात्र तरीका यह है कि मैं अपने इंजन से एक स्ट्रिंग के रूप में एक फाइल लोड कर रहा हूं और इसे Rails :: Initializer ब्लॉक में पर्यावरण.आरबी में से बाहर निकालना है ताकि फाइल को 'config' 'और config.gem eval (file.read ("# {RAILS_ROOT} /vendor/plugins/my-engine/config/gems.rb") को कॉल करने में सक्षम हो) यह बहुत बदसूरत है लेकिन ऐसा लगता है कि यह आपके जैसा लगता है उस ब्लॉक के बाहर मणि निर्भरताओं को निर्दिष्ट न करें। मुझे लगता है कि मेरा जेनरेटर उस ब्लॉक के भीतर प्रासंगिक लाइनों को जोड़ सकता है लेकिन मैं इंजन की आवश्यकताओं को यथासंभव अलग रखना चाहता हूं। – DavidNorth