Verwalten von mongoid Migrationen
Kann mir jemand eine kurze Einführung zu tun-DB-Migrationen in Schienen mit Mongoid? Ich bin besonders daran interessiert, faul, pro Dokument-Migrationen. Damit meine ich, dass, wenn Sie ein Dokument Lesen aus der Datenbank, die Sie migrieren auf die neueste version und speichern es erneut.
Hat jemand dies getan Art der Sache vor? Ich bin gekommen, über mongoid_rails_migrations, aber es nicht bieten jede Art von Dokumentation, und obwohl es sieht aus wie es dies tut, ich bin mir nicht wirklich sicher, wie es zu benutzen.
Sollte ich darauf hinweisen, ich bin nur konzeptionell vertraut mit ActiveRecord-Migrationen.
- Ich glaube nicht, dass faul Migrationen sind eine gute Idee. Ich würde lieber die Zeit nehmen, zu laufen, eine massive Daten-update, warten Sie, bis es abgeschlossen ist, den monitor, denken Sie über eine Möglichkeit, zu der Sie zurückkehren, wenn etwas schief geht, und testen Sie es zuerst auf eine Datenbank zu Klonen. Es braucht Zeit, aber es wird nicht lassen Sie mit inkonsistenten Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, um die gesamte migration auf einmal, dann mongoid_rails_migrations wird tun, was Sie brauchen. Es gibt nicht wirklich viel zu dokumentieren, es dupliziert die Funktionalität der standard-ActiveRecord-migration. Schreiben Sie Ihre Migrationen, und verwenden Sie dann
rake db:migrate
für Sie gelten und bearbeitet es, herauszufinden, welche und wurden nicht lief. Kann ich weitere Fragen beantworten, wenn es etwas genauer Sie es wissen wollen.Faul für Migrationen, die einfachste Lösung ist die Verwendung der after_initialize Rückruf. Überprüfen Sie, ob ein Feld-Spiele die alten Daten-Schema, und wenn es das tut Sie, ändern Sie das Objekt und aktualisieren Sie es, so zum Beispiel:
Die vor-und Nachteile im Auge zu behalten, mit den spezifischen Ansatz, den ich gab oben:
Wenn Sie eine Anfrage, gibt eine Menge von Datensätzen, wie
Person.all.each {|p| puts p.name}
und 100 Leute haben, die das alte format, es wird sofort laufen 100 Abfragen. Sie können auch telefonischself.name = "#{self.first_name} #{self.last_name}".strip
statt, aber das bedeutet, dass Ihre Daten werden nur dann migriert werden, wenn der Datensatz gespeichert wird.Allgemeine Fragen die Sie haben könnten ist, dass jede Masse Abfragen wie
Person.where(:name => /Foo/).count
schlagen fehl, bis alle Daten migriert. Auch wenn Sie tunPerson.only(:name).first
die migration fehlschlagen würde, weil Sie vergessen haben, gehören diefirst_name
undlast_name
Felder.Zachary Anker hat viel erklärt in seiner Antwort.mit mongoid_rails_migrations ist eine gute option für die migration.
Hier sind einige links mit einem Beispiel, das nützlich sein wird für Sie, durch zu gehen, und verwenden Sie mongoid_rails_migrations
Mongoid-Migrationen mit der Mongo-Treiber
Die Einbettung von Mongoid Dokumente und Daten-Migrationen
Anderen dann die Readme ist soll es genug sein mit diesem Beispiel zu implementieren mongoid migration
Ich habe das gleiche brauchen.
Hier ist was ich kam mit: https://github.com/nviennot/mongoid_lazy_migration
Ich würde gerne schätzen ein feedback