/ / Konvertieren der Datenbankstruktur / Daten in Rails - Ruby-on-Rails, Migration

Datenbankstruktur / Daten in Rails konvertieren - Ruby-on-Rails, Migration

Dies ist eine Art Folgemaßnahme zu dieser Frage: Können mit Rails Migrations Daten konvertiert werden?

Wenn ich an einem Zweig arbeite, wenn es istDurch die erneute Integration und Freigabe für die Produktion wird das Datenbankschema drastisch geändert. Wie kann am besten sichergestellt werden, dass alle Daten in der Produktion in das neue Format konvertiert werden?

Ein einfaches Beispiel wäre, dass es eine numerische Spalte gibt, die wir in Text ändern und einige Konvertierungsarbeiten an den Daten durchführen möchten. Dann wollen wir die alte Spalte löschen.

Mir wurde geraten, bei Migrationen keine Daten zu manipulieren, sondern dafür Rechenaufgaben zu erstellen. Gibt es einen Mechanismus, mit dem sichergestellt wird, dass Rechenaufgaben neben Migrationen auch nacheinander ausgeführt werden können?

Im Moment ist die einzige Lösung, an die ich denken kann, zubündeln Sie alle Migrationen, die die ungültigen Spalten löschen, in einer zweiten Auflistung. Führen Sie die ersten Migrationen aus, mit denen die neuen Tabellen hinzugefügt werden. Führen Sie die Rake-Tasks und dann den zweiten Migrationssatz aus. Dies scheint mir keine ideale Lösung zu sein und könnte leicht schief gehen.

Antworten:

2 für die Antwort № 1

Migrationen sind genau für diese Art von Sachen. Das Konvertieren von Daten in der Datenbank für eine neue Version der Anwendung mit oder ohne Schemaänderung sollte eine Migration sein. Dies ist die Garantie dafür, dass neue Änderungen in der Produktion vorgenommen werden, bevor die neue Version der Anwendung live geschaltet wird.

Wenn Sie in der Filiale arbeiten, erstellen Sie einfach eineNeue Migration, wodurch eine neue Datei mit Zeitstempel erstellt wird. Beim Zusammenführen in den Release-Zweig wird die Datei nur kopiert. Aufgrund des Zeitstempels werden die Migrationen (wahrscheinlich) in der richtigen Reihenfolge ausgeführt.

Wenn die von Ihnen durchgeführte Konvertierung jedoch von Zeit zu Zeit ausgeführt wird, sollten Sie eine Rake-Task verwenden.