Dies ist eine Art eines zu dieser Frage folgen: Can Rails Migrations be used to convert data?Konvertieren von Datenbankstruktur/Daten in Rails
Wenn ich auf einem Ast bin arbeiten, die, wenn sie wieder integriert und zur Produktion freigegeben, wird die Änderung Datenbankschema ziemlich drastisch. Wie können Sie sicherstellen, dass alle Daten in der Produktion in das neue Format konvertiert werden?
Ein einfaches Beispiel wäre, gibt es eine numerische Spalte, die wir in Text ändern möchten und einige Konvertierungsarbeiten an den Daten vornehmen. Dann wollen wir die alte Spalte fallen lassen.
Mir wurde geraten, keine Datenmanipulation bei Migrationen vorzunehmen, sondern stattdessen Rake-Aufgaben zu erstellen. Gibt es einen Mechanismus, mit dem sichergestellt werden kann, dass Rake-Aufgaben neben Migrationen ausgeführt werden können?
Im Moment ist die einzige Lösung, die ich mir vorstellen kann, alle Migrationen zusammenzufassen, die die nicht mehr existierenden Spalten in eine zweite Sammlung fallen lassen. Führen Sie die erste Gruppe von Migrationen aus, die die neuen Tabellen hinzufügen. Führen Sie die Rake-Aufgaben aus, und führen Sie dann die zweite Gruppe von Migrationen aus. Das scheint mir keine ideale Lösung zu sein und könnte leicht schiefgehen.
Jemand wies darauf in meiner vorherigen Frage hin; "Sagen wir ein paar Wochen später fügen Sie dem Modell eine neue Validierung hinzu - eine Validierung, die auf einem Feld ausgeführt wird, das in Ihrer zweiten Migration noch nicht existiert. Wenn Sie jemals die Datenbank aus der Migration 0 konstruieren würden, Ich habe ein paar Probleme. " – Kirschstein
Aus diesem Grund sollten Sie möglichst keine Modellklassen in Ihren Migrationen verwenden. Eine Datenmigration, über die wir hier sprechen, kann und sollte mit Raw SQL über Model.connection.execute() erfolgen. –