तुम क्या करने की कोशिश कर रहे क्या खतरनाक है। यदि आपके प्रत्येक रेल इंजन भी रत्न हैं - तो उनके पास अन्य निर्भरताओं के साथ जेमफाइल भी होंगे, और बदले में अन्य निर्भरताएं होंगी। यदि आप बंडलर को उनको हल करने की अनुमति देते हैं, तो आपको रनटाइम पर कम समस्याएं होंगी।
यहां यह है कि आप इसे बिना किसी हैक्स के बिना कैसे करेंगे। याद रखें कि आपका Gemfile
सिर्फ रूबी कोड है, और आपके पास रत्न हो सकते हैं जो डिफ़ॉल्ट रूप से लोड नहीं होते हैं।
# In your Gemfile, add at the end:
Dir[YOUR_RAILS_ENGINES_SUBFOLDER + "/*/*.gemspec"].each do |gemspec_file|
dir_name = File.dirname(gemspec_file)
gem_name = File.basename(gemspec_file, File.extname(gemspec_file))
# sometimes "-" and "_" are used interchangeably in gems
# for e.g. gemspec_file is "engines/my-engine/my_engine.gemspec"
# dir_name will be engines/my-engine
# gem_name will be my_engine
# Register that engine as a dependency, *without* being required
gem gem_name, :path => dir_name, :require => false
# e.g. this is similar to saying
# gem 'my_engine', :path => 'engines/my-engine', :require => false
end
अब आपके सभी गतिशील रेल इंजन मणि निर्भरताओं के रूप में पंजीकृत हैं। बंडलर उन्हें और उनके सभी उप-निर्भरताओं को हल करेगा, इसलिए आपको किसी चीज़ के बारे में चिंता करने की ज़रूरत नहीं है। एप्लिकेशन चलाने से पहले bundle install
चलाएं, या जब भी आप उस फ़ोल्डर में किसी भी इंजन को जोड़/हटा दें।
अच्छी बात यह है कि ये रत्न केवल पंजीकृत होंगे, और लोड नहीं होंगे। तो अपने उत्पादन कोड में, अब आप जो कुछ भी मणि है कि आप क्रम में चयन लोड कर सकते हैं बस कह require <your-engine-name>
संपादित करें द्वारा: अतिरिक्त कोड टिप्पणी
जिज्ञासा से बाहर: आप यूज-केस समझा सकता है? यह मुझे स्पष्ट नहीं है कि आप ऐसा क्यों करना चाहते हैं। – nathanvda
विचार मॉड्यूलर रेल एप्लिकेशन होना था जो रनटाइम पर इसके मॉड्यूल लोड करेगा। मैं निर्देशिका में मॉड्यूल/रत्न डालना चाहता था, एप्लिकेशन शुरू करना और लचीला होना चाहता था :) –
ठीक है, मुझे लगता है कि आपके पास कुछ सामान्य रेल ऐप हैं जो आप क्लाइंट-साइट पर स्थापित करते हैं, और कुछ विकल्पों (शुल्क/लाइसेंस) के आधार पर इंस्टॉल करते हैं फ़ोल्डर में सही मॉड्यूल। लेकिन क्या होगा यदि आप सिर्फ Gemfile को संपादित करें, और इंस्टॉल बंडल करें? यह कम काम है, यह सुरक्षित है, और केवल संपादन/कॉन्फ़िगरेशन Gemfile संपादित कर रहा था। यही तो हम भी करते हैं। हम अपने स्वयं के "निजी" रत्नों के लिए अपने स्वयं के रत्नकर्ता की मेजबानी करते हैं। यदि कोई मॉड्यूल सक्षम या अक्षम है, तो हम सिर्फ Gemfile, बंडल को संपादित करें और पुनरारंभ करें। – nathanvda