मैं ActiveRecord मणि को नवीनतम 3.1.0 रिलीज़ में अपग्रेड करने और कई अपवादों को उठाए जाने का प्रयास कर रहा हूं, मुझे लगता है कि यह कई डेटाबेस को कैसे प्रबंधित करता है इसके कारण है।ActiveRecord 3.1.0 एकाधिक डेटाबेस
हमारे प्रत्येक डेटाबेस के लिए हम एक अलग बेस क्लास निर्दिष्ट करते हैं जो ActiveRecord::Base
से प्राप्त होता है, और वहां establish_connection
पर कॉल करें। कोई क्रॉस-डेटाबेस संबंध नहीं हैं। इसने अभी तक हमारे लिए ठीक काम किया है।
ActiveRecord 3.1.0 में अपग्रेड करने के बाद मैं देख रहा हूं कि यह ActiveRecord::ConnectionNotEstablished
अपवाद के साथ विफल रहता है, जब संबंधों को पार करते समय (यानी यह सफलतापूर्वक एक इकाई को खींच लेता है या डीबी से सेट करता है, लेकिन संबंधित सेविगेट करते समय विफल रहता है कक्षा)।
बैकट्रैक की शीर्ष पंक्ति C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in 'retrieve_connection'
है, इसलिए मैंने इसे थोड़ा खोला। विधि इस प्रकार परिभाषित किया गया है:
def retrieve_connection(klass) #:nodoc:
pool = retrieve_connection_pool(klass)
(pool && pool.connection) or raise ConnectionNotEstablished
end
मेरे साधारण परीक्षण (puts Customer.first.address
) कॉल retrieve_connection
3 बार। Customer
के साथ klass
पैरामीटर के साथ दो बार, और एक बार पैरामीटर के रूप में ActiveRecord::Base
के साथ - जो establish_connection
के रूप में विफल होने पर ActiveRecord::Base
के लिए कॉल नहीं किया गया है।
वास्तविक प्रश्न पर - क्या ActiveRecord में एकाधिक डेटाबेस कनेक्शन को संभालने का एक नया अनुशंसित तरीका है? यदि ऐसा है, तो ये क्या है?
यदि नहीं, तो इस समस्या का कारण क्या हो सकता है?
इसके लिए धन्यवाद, अभी तक इसे आजमाने का समय नहीं है लेकिन यह एक अच्छा समाधान की तरह लगता है! कृपया वापस आएं और अगर आपको एक बेहतर तरीका मिल जाए तो हमें बताएं ... –
हम एक ही समस्या में भाग गए हैं और बेहतर समाधान ढूंढना पसंद करेंगे। फ़िर भी सहायता के लिए धन्यवाद। कम से कम हम अभी भी अनब्लॉक कर रहे हैं! – jasonkarns
इस समस्या में खुद को चलाएं (activerecord 3.1.3) और सुझाए गए समस्या का समाधान किया है। मैं सहमत हूं कि एक बेहतर समाधान अधिक आदर्श होगा। –