1

Ich arbeite derzeit an einer Rails-App, wo wir Mongoid/MongoDB auf dem Back-End verwenden. Ich verstehe, dass ich ActiveRecord wie Migration nicht benötige, um das Schema zu migrieren, aber ich muss Daten migrieren, während ich Mongoidmodelldefinitionen ändere. Gibt es noch jemanden, der in dasselbe Szenario hineinrennt? Wenn ja, wie gehst du damit um?Schienen/Mongoid Datenbankmigrationen

+2

https://github.com/adacosta/mongoid_rails_migrations – rubish

Antwort

2

Schreiben Sie einen benutzerdefinierten Rake Aufgabe, die Daten als

+0

Dank. Ich hatte darüber nachgedacht, aber ich muss das einmal laufen lassen. –

+1

Ich folge nicht. Sie können eine Rake-Aufgabe einfach so oft ausführen, wie Sie möchten. Führen Sie es einmal aus und löschen Sie dann die Aufgabe. – cpjolicoeur

+0

Also ich möchte es einmal ausgeführt werden und dann eine Art von Datensatz, dass es ausgeführt wurde, so dass es nie wieder ausgeführt wird, solange dieser Datensatz in der Datenbank bleibt. Allerdings habe ich nicht daran gedacht, den Code einfach zu entfernen, nachdem er ausgeführt wurde. –

0

Ich hatte das einig Szenario vor kurzem, wo ich nur einmal eine Datenmigration zu tun habe (im Grunde schmutzige Daten aktualisieren); Also, was ich hatte eine Mongoid-Migrationen in/db/migrate/und überschreiben die db: migrieren Aufgabe, so dass es erstellt eine Sammlung in Mongo Db dieser App selbst, sagen "Migrationen", die die Migration, die gefeuert hat, mit aufzeichnen Dies bedeutet, dass keine Migration erneut ausgeführt wird und Sie können weiterhin Migrationen mit einer Hierarchie hinzufügen (falls die Migration voneinander abhängig ist).

6

Obwohl Sie keine Schemaänderungen vornehmen, müssen Sie möglicherweise Daten zwischen Feldern verschieben oder Felder entfernen, die nicht mehr in der Codebasis verwendet werden. Es ist schön, Migrationen zu haben, die Sie ausführen können, wenn Sie neuen Code bereitstellen. Ich empfehle ein Juwel namens mongoid_rails_migrations. Dies bietet Ihnen Migrationsgeneratoren, wie Sie es gewohnt sind, und bietet eine Organisation für die Migration von Daten.

class MyMigration < Mongoid::Migration 

    def self.up 
    MyModel.all.each do |model| 
     # label was renamed to name 
     model.set :name, model[:label] # copy the data from the old field to the new one 
     model.remove_attribute :label # remove the old field from the document 
     model.save! 
    end 
    end 

end 
+1

Nur ein Kopf, ein gebaut In diesem Fall ist 'MyModel.all.rename (label:: name)'. Dies führt eine atomare $ Umbenennung durch und bietet Ihnen eine weitaus bessere Leistung als das manuelle Durchlaufen und Speichern. +1 für 'mongoid_rails_migrations' :) – Jay

Verwandte Themen