ActiveRecord 3.1.0 mehrere Datenbanken

8

Ich bemühe mich, das ActiveRecord-Juwel auf die neueste 3.1.0-Version zu aktualisieren, und ich sehe viele Ausnahmen, die ausgelöst werden. Ich denke, es liegt daran, wie wir mit mehreren Datenbanken umgehen.

Für jede unserer Datenbanken geben wir eine eigene Basisklasse an, die von ActiveRecord::Base erbt und dort establish_connection aufruft. Es gibt keine datenbankübergreifenden Beziehungen. Das hat für uns bisher gut funktioniert.

Nachdem ich auf ActiveRecord 3.1.0 aufgerüstet habe, sehe ich, dass es mit einer ActiveRecord::ConnectionNotEstablished -Ausnahme beim Tracing von Relationen fehlschlägt (dh es wird eine einzelne Entity oder einen Satz von ihnen erfolgreich aus der DB ziehen, aber beim Navigieren zu a verwandte Klasse).

Die oberste Zeile des Backtrace ist 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' , also habe ich ein wenig nachgedacht. Die Methode ist wie folgt definiert:

%Vor%

Mein einfacher Test ( puts Customer.first.address ) ruft retrieve_connection 3 mal auf. Zweimal mit Customer als Parameter klass und einmal mit ActiveRecord::Base als Parameter - wenn es fehlschlägt, da establish_connection nicht für ActiveRecord::Base aufgerufen wurde.

Zu der tatsächlichen Frage - gibt es dann eine neue empfohlene Methode, mehrere Datenbankverbindungen in ActiveRecord zu behandeln? Wenn ja, was ist das?

Wenn nicht, was könnte dieses Problem verursachen?

    
Jon M 12.09.2011, 15:54
quelle

2 Antworten

8

Ich habe gestern bei der Aktualisierung auf ActiveRecord 3.1.0 auf dasselbe Problem gestoßen. Ich kann nicht sprechen, ob es eine neue empfohlene Methode gibt, mehrere Datenbankverbindungen in ActiveRecord 3.1 zu behandeln, aber ich habe eine Möglichkeit gefunden, mich selbst zu entsperren.

Es scheint, dass jetzt eine Verbindung auf ActiveRecord :: Base hergestellt werden muss, um die Tabellennamenlängen / Regeln des Adapters zu bestimmen. Zusammen mit dem Rest meiner Verbindungen, die ich in meinem Datenbankinitialisierer eingerichtet habe, habe ich jetzt auch eine ActiveRecord :: Base-Verbindung zu einer meiner DBs aufgebaut (egal welche).

Ich würde gerne denken, dass es eine bessere Lösung zu finden gibt, aber ich bin froh, für den Moment entsperrt zu sein.

    
Cole R 13.09.2011, 18:04
quelle
3

Ich benutze diese Lösung - Was ich sah war, dass, wenn in jeder der OtherDb-Klassen eine Verbindung aufgebaut wurde - es schien eine Menge Overhead-Definitionsdefinitionen zu geben und ich würde zufällig jedes Mal Probleme sehen, wenn die Klasse def neu geladen wurde.

%Vor%     
stackdump 28.11.2011 19:20
quelle

Tags und Links