मैंने निम्नलिखित पर ध्यान दिया है:
पूर्ण इंजन
पूर्ण इंजन के साथ, मूल अनुप्रयोग इंजन से मार्गों को इनहेरिट करता है। इसमें कुछ भी निर्दिष्ट करना आवश्यक नहीं है parent_app/config/routes.rb
। जेमफाइल में मणि को निर्दिष्ट करना माता-पिता ऐप के लिए मॉडल, मार्ग आदि को इनहेरिट करने के लिए पर्याप्त है। इंजन रूट निम्नानुसार हैं:
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
मॉडल, नियंत्रक आदि का कोई नाम स्थान नहीं, ये मूल आवेदन के लिए तुरंत सुलभ हैं।
माउंटेबल इंजन
इंजन का नाम स्थान डिफ़ॉल्ट रूप से अलग है:
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
एक माउंटेबल इंजन के साथ, मार्ग नामांकित हैं और मूल एप्लिकेशन एकल मार्ग के तहत इस कार्यक्षमता को बंडल कर सकता है:
# my_engine/config/routes.rb
MyEngine::Engine.routes.draw do
#whatever
end
# parent_app/config/routes.rb
ParentApp::Application.routes.draw do
mount MyEngine::Engine => "/engine", :as => "namespaced"
end
मॉडल, कंट्रोलर आदि को पेरेंट एप्लिकेशन से अलग किया जाता है - हालाँकि हेल्पर्स को आसानी से साझा किया जा सकता है।
ये मुख्य अंतर हैं जिन्हें मैंने देखा है। शायद वहाँ दूसरों रहे हैं? मैंने यहां पर पूछा है , लेकिन अभी तक प्रतिक्रिया नहीं मिली है।
मेरी धारणा यह है कि चूंकि एक पूर्ण इंजन स्वयं को मूल अनुप्रयोग से अलग नहीं करता है, इसलिए इसे मूल अनुप्रयोग से सटे स्टैंडअलोन अनुप्रयोग के रूप में उपयोग किया जाता है। मेरा मानना है कि नाम में गड़बड़ी हो सकती है।
एक माउंटेबल इंजन का उपयोग उन स्थितियों में किया जा सकता है जहां आप नाम के टकराव से बचना चाहते हैं और मूल एप्लिकेशन में एक विशिष्ट मार्ग के तहत इंजन को बंडल करते हैं। उदाहरण के लिए, मैं ग्राहक सेवा के लिए डिज़ाइन किए गए अपने पहले इंजन के निर्माण पर काम कर रहा हूं। मूल एप्लिकेशन एकल रूट के तहत इसकी कार्यक्षमता को बंडल कर सकता है जैसे:
mount Cornerstone::Engine => "/cornerstone", :as => "help"
अगर मैं अपनी धारणाओं में बंध जाता हूं, तो कृपया मुझे बताएं और मैं इस प्रतिक्रिया को ठीक करूंगा। मैंने यहाँ चीयर्स विषय के बारे में एक छोटा सा लेख बनाया है !