In einigen meiner Rails-Anwendungen scheinen meine ActiveRecord-Modelle bei der Initialisierung db-Verbindungen herzustellen (z. B. wenn ich rails console
mache), während in anderen Verbindungen anscheinend nur eingerichtet wird, wenn ich die Modellklasse referenziere oder ein Modellobjekt instanziiere.Wann stellt ActiveRecord Verbindungen her?
Zum Beispiel ging ich einfach zu einer Anwendung geöffnet Rails-Konsole und schrieb:
SomeModel.connected?
und es kehrte false
. Ich ging zu einer anderen Anwendung, gab denselben Befehl (für ein anderes Modell) ein und gab true
zurück. Ich ging zu einer dritten Anwendung und gab den gleichen Befehl ein. Diesmal wartete es einen Moment und kehrte dann true
zurück, was mich denken ließ, dass die connected?
Methode die Verbindung aus irgendeinem Grund ausgelöst hat.
Dieser Unterschied im Verhalten scheint nicht mit Rails-Versionen oder den Inhalten der Modelle verwandt zu sein. Es könnte etwas Seltsames sein, das ich in meinen Initialisierern gemacht habe, aber das glaube ich nicht.
Wann stellt Rails Verbindungen her? Oder wie ist das erwartete Verhalten?
ZUSÄTZLICHE INFORMATIONEN
ich will hinzufügen, dass es nicht wie connected?
kehrt scheint falsch, weil Rails nicht mit der Datenbank verbinden.
Zum Beispiel in meinem ersten Anwendung habe ich:
SomeModel.connected?
# => false
SomeModel.table_exists? # or any other command that makes Rails look at db
# => true
SomeModel.connected?
# => true
Möglicherweise verbundene Zusagen https://github.com/rails/rails/commit/7423a71fc02c0ca3bf37b94e16a1322c0caaa6fd, https://github.com/rails/rails/commit/85cc7122bab1cfec661fdfe3bf4738d9fba55399. Leider wird letzterer nicht auf 3.2.x – sayap
zurückportiert. Und das gilt auch: https://github.com/rails/rails/commit/d3688e02ca52c0b72d3092e8498da51e06b7fc58 – sayap
@sayap, hey danke für die Links. Die helfen wirklich, das beabsichtigte/erwartete Verhalten zu erklären –