59 Stimmen

Was ist der beste Weg, verwaiste Rails-Migrationen zu lösen?

Ich habe zwischen verschiedenen Branches in einem Projekt gewechselt und jeder von ihnen hat unterschiedliche Migrationen... Dies ist das Szenario:

$ rake db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   ...
   up     20130307154128  Spaltenänderung in Traffic-Capture
   up     20130311155109  Log-Einstellungen entfernen
   up     20130311160901  Log-Alarm-Tabelle entfernen
   up     20130320144219  ********** KEINE DATEI **********
   up     20130320161939  ********** KEINE DATEI **********
   up     20130320184628  ********** KEINE DATEI **********
   up     20130322004817  Replikat zu Root-Einstellungen hinzufügen
   up     20130403190042  ********** KEINE DATEI **********
   up     20130403195300  ********** KEINE DATEI **********
   up     20130403214000  ********** KEINE DATEI **********
   up     20130405164752  AP-Hostnamen korrigieren
   up     20130410194222  ********** KEINE DATEI **********

Das Problem ist, dass rake db:rollback überhaupt nicht funktioniert, weil die Dateien fehlen...

Was kann ich tun, um wieder rollbacks durchführen zu können und die KEINE DATEI-Nachrichten loszuwerden?

Übrigens sind rake db:reset oder rake db:drop keine Option, ich kann keine Daten aus anderen Tabellen verlieren...

0voto

Chad M Punkte 894

Eine Zeile für die Rails-Konsole, sobald Sie die Versionsnummern von fehlgeschlagenen rake db:migrate oder NO FILE-Einträgen von rake db:migrate:status haben

 class SchemaMigration < ActiveRecord::Base; end; SchemaMigration.where(version: %i[Die zu löschenden Versionsnummern]).delete_all

Was bedeutet, dass Sie aus dem Terminal heraus können

rails runner "class SchemaMigration < ActiveRecord::Base; end; SchemaMigration.where(version: %i[Die zu löschenden Versionsnummern]).delete_all"

Obwohl es zu diesem Zeitpunkt möglicherweise schneller ist, einen der direkten Datenbankbefehle aus den vorherigen Antworten zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X