2012-06-27 12 views
5

हमारे पास PostgreSQL डेटाबेस (~ 10 टेबल के साथ) activerecord द्वारा मैप किए गए एक रेल 3 एप्लिकेशन है। सब कुछ ठीक काम कर रहा है।एकाधिक रेल ORM

हालांकि, हम भी उपयोग करना चाहते हो सकता है:

  • एक MongoDB डेटाबेस आदेश छवियों (शायद mongoid मणि के साथ) स्टोर करने के लिए में।
  • नियो 4j डेटाबेस (शायद neo4j-rails मणि के साथ) कुछ तालिकाओं के लिए PostgreSQL के बजाय।

एक रेल ओआरएम के साथ डेटाबेस का उपयोग करना आसान है, database.yml के लिए धन्यवाद। लेकिन जब एक से अधिक ओआरएम होते हैं, तो हम कैसे प्रक्रिया कर सकते हैं? क्या ऐसा करने का कोई अच्छा तरीका है? उदाहरण के लिए, ActiveHash (और ActiveYaml) ActiveRecord के साथ अच्छी तरह से काम कर सकता है। मुझे लगता है कि अलग-अलग ओआरएम एक साथ काम करने की संभावना हो सकती है। किसी भी सुझाव के लिए धन्यवाद।

उत्तर

4

यह वास्तव में ओआरएम के प्रकार पर निर्भर करता है। ऐसा करने का एक शानदार तरीका विरासत का उपयोग कर है। उदाहरण के लिए आपके डेटाबेस.इम्ल फ़ाइल में परिभाषित कई डेटाबेस और एडेप्टर हो सकते हैं। आप ActiveRecord establ_connection विधि का उपयोग करके इनसे आसानी से बात कर सकते हैं।

# A typical Active record class 
class Account < ActiveRecord::Base 
    ... 
end 

# A new database connection 
class NewConnection < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection "users_database" 
end 

# A new Active record class using the new connection 
class User < NewConnection 
    ... 
end 

यहाँ केवल नीचे की ओर करके ऐसी अनेक सक्रिय रिकॉर्ड डेटाबेस माइग्रेशन के लिए कनेक्शन हैं एक छोटा सा dicey मिल सकता है।

ORM के

मिश्रण ORMS मिश्रण आसान है। उदाहरण MongoDB (mongoid के साथ) के लिए, बस सक्रिय रिकॉर्ड से विरासत न और शामिल मॉडल आप मोंगो उपयोग करना चाहते हैं में निम्नलिखित:

class Vehicle 
    include Mongoid::Document 

    field :type 
    field :name 

    has_many :drivers 
    belongs_to :account 

end 

सक्रिय मॉडल के ऊपर एक बने ORMs एक साथ बहुत अच्छी तरह से खेलते हैं। उदाहरण के लिए, मोंगोइड के साथ आप ActiveRecord मॉडल में संबंधों को परिभाषित करने में सक्षम होना चाहिए, इसका मतलब है कि आपके पास न केवल एकाधिक डेटाबेस हो सकते हैं लेकिन वे सक्रिय मॉडल के माध्यम से आसानी से संवाद कर सकते हैं।

1

सबसे पहले, मैं दृढ़ता से आपको सलाह देता हूं कि एक ही ऐप में एकाधिक ORMs रखने का प्रयास करें। अनिवार्य रूप से आप अपने Mongoid ऑब्जेक्ट को किसी भी तरह से अपने ActiveRecord ऑब्जेक्ट से 'संबंधित' करने के लिए चाहते हैं। और रास्ते हैं (नीचे देखें) ... लेकिन उनमें से सभी अंततः दर्द का कारण बनते हैं।

यदि आपको लगता है कि आपको ऐसा करने की आवश्यकता है तो आप शायद कुछ गलत कर रहे हैं। छवियों को स्टोर करने के लिए आपको मोंगो डीबी की आवश्यकता क्यों है? और यदि आप इसे एक छवि स्टोर के रूप में उपयोग कर रहे हैं, तो आपको मोंगोइड या कुछ अन्य ओआरएम (या अधिक सटीक, ओडीएम) की आवश्यकता क्यों होगी? यदि आपको वास्तव में, वास्तव में एक दूसरा डेटा स्टोर और दूसरा ओआरएम/ओडीएम जोड़ने की ज़रूरत है, तो क्या आप इसे एक अलग ऐप के रूप में बंद कर सकते हैं और इसे अपने पहले से सेवा के रूप में कॉल कर सकते हैं? इस बारे में कड़ी मेहनत करो।

उसने कहा, यदि आप वास्तव में "पॉलीग्लोट दृढ़ता" (मेरी अवधि नहीं) के साथ जाना चाहते हैं, तो एक सभ्य मणि है: https://github.com/jwood/tenacity। यह अब सक्रिय रूप से विकसित नहीं हुआ है, लेकिन रखरखाव बग को ठीक करता है और तुरंत पूछताछ का जवाब देता है और अनुरोध खींचता है।

+0

हाय वहाँ, मैं आपकी टिप्पणी थी। सुनो मैं ऐसा करने के बारे में सोच रहा था: व्यवसाय-तर्क के लिए उपयोगकर्ता पंजीकरण और नियो 4 जे के लिए एक डीबी-प्रकार है।अब यू लगता है कि मैं एक मिनी रोर कि अभी साइन-इन प्रक्रिया का ख्याल रखता है और फिर दूसरे कि सिर्फ उत्पाद के व्यापार तर्क पर ध्यान केंद्रित हो सकता था? धन्यवाद! – YoniGeek