web-dev-qa-db-de.com

So löschen Sie Migrationsdateien in Rails 3

Ich möchte eine Migrationsdatei entfernen/löschen. Wie würde ich das machen? Ich weiß, dass es hier ähnliche Fragen gibt, aber gibt es als Update einen besseren Weg als Script/Destroy?

Soll ich auch ein db:reset oder db:drop wenn ich eine Migration entferne/lösche?

104
alvincrespo

Ich für gewöhnlich:

  1. Führe ein rake db:migrate VERSION=XXX in allen Umgebungen auf die Version vor der, die ich löschen möchte.
  2. Löschen Sie die Migrationsdatei manuell.
  3. Wenn ausstehende Migrationen vorhanden sind (d. H. Die von mir entfernte Migration war nicht die letzte), führe ich einfach eine neue rake db:migrate nochmal.

Wenn Ihre Anwendung bereits in Produktion ist oder bereitgestellt wird, ist es sicherer, nur eine weitere Migration zu schreiben, die Ihre Tabelle oder Spalten zerstört.

Eine weitere gute Referenz für Migrationen ist: http://guides.rubyonrails.org/migrations.html

139
Fábio Batista

Eine andere Möglichkeit, die Migration zu löschen:

$ Rails d migration SameMigrationNameAsUsedToGenerate

Verwenden Sie es vor rake db:migrate wird ausgeführt, weil Änderungen in der Datenbank für immer bleiben :) - oder Änderungen manuell entfernen

66
Gediminas

Führen Sie die folgenden Befehle aus dem Basisverzeichnis der App aus:

  1. rake db:migrate:down VERSION="20140311142212" (hier ist die Version der Zeitstempel, dem Rails beim Erstellen der Migration vorangestellt wurde. Diese Aktion macht DB-Änderungen aufgrund dieser Migration rückgängig.)

  2. Run "Rails destroy migration migration_name" (migration_name ist der Name, der beim Erstellen der Migration verwendet wurde. Entfernen Sie "timestamp _" aus Ihrem Migrationsdateinamen, um ihn abzurufen.)

19
fOx

Wir können auch die Migration als

rake db:migrate:down VERSION=versionnumber

Siehe Rubyonrailsguide

9
Vicky

Wir können benutzen,

$ Rails d migration table_name  

Welches wird die Migration löschen.

8
Agnes

Manchmal habe ich festgestellt, dass ich die Migrationsdatei und dann den entsprechenden Eintrag in der Tabelle schema_migrations aus der Datenbank gelöscht habe. Nicht schön, aber es funktioniert.

2
frenesim

Schauen Sie sich 4.1 Rollback an

http://guides.rubyonrails.org/migrations.html

$ rake db: rollback

1
user1781626

Keine dieser Antworten passte ganz zu dem Problem, das ich hatte, als die Migration, die ich löschen wollte, fehlte: Ich hatte eine Migration in einem anderen Zweig erstellt und ausgeführt, die dann verworfen wurde. Das Problem ist, wenn eine Migration ausgeführt wird, Rails fügt die Version in ein schema_migrations Tabelle in der Datenbank. Auch wenn es nicht in Ihrer Datenbankstruktur oder Ihrem Schema aufgeführt ist, sucht Rails) danach. Sie können diese verwaisten Migrationen anzeigen, indem Sie Folgendes ausführen:

Rails db:migrate:status

Notieren Sie sich die Versionen der fehlenden Migrationen und rufen Sie die Datenbankkonsole auf:

Rails dbconsole

Entfernen Sie nun die Versionen manuell aus der Migrationstabelle:

delete from schema_migrations where version='<version>';

Du solltest jetzt gut sein.

0
stackPusher

Ich hatte gerade das gleiche Problem:

  1. Rails d migration f -dies löschte die Migration mit dem letzten Zeitstempel
  2. Rails d migration f -dies löschte die andere Migration
  3. verwenden Sie Git-Status, um zu überprüfen, ob die nicht verfolgten Dateien nicht mehr vorhanden sind
  4. Rails g migration f

Das hat es für mich behoben

0
Miguel Alatorre