Zeigt SQL, das von ausstehenden Migrationen in Schienen generiert wurde, ohne die Datenbank zu aktualisieren

9

Ich hätte gerne eine Möglichkeit, die tatsächliche sql zu erzeugen (dh wenn ich in eine mysql-Konsole einfügen würde, würde es funktionieren), die von einer Rake-Datenbank generiert wird: migrieren, ohne die Zieldatenbank tatsächlich zu aktualisieren.

rake db: migrate: status zeigt sehr gut an, welche Migrationen für eine bestimmte Datenbank ausstehen, aber ich muss noch einen Weg finden, um das eigentliche SQL zu erzeugen.

Irgendwelche Ideen?

    
Mason Bryant 06.04.2013, 15:53
quelle

4 Antworten

1

Dies kann durch Affepatching des Datenbankadapters erfolgen. Dieses Beispiel funktioniert für MySQL.

Erstellen Sie eine Rake-Aufgabe für "fake db: migrate":

%Vor%

Die Rake-Aufgabe affe-patcht die Methode execute im Verbindungsadapter, so dass SQL gedruckt wird, anstatt ausgeführt zu werden, bevor die Migrationen tatsächlich ausgeführt werden. Allerdings müssen wir noch einige interne SQL-Anweisungen ausführen, die von der db:migrate -Aufgabe verwendet werden, um das Datenbankschema abzurufen und herauszufinden, welche Migrationen ausstehen. Das ist der real_execute -Aufruf.

Test

Angenommen, wir haben eine ausstehende Migration in db/migrate/20160211212415_create_some_table.rb :

%Vor%

Lassen Sie uns nun unsere gefälschte Migrationsaufgabe ausführen:

%Vor%

Der Migrationsstatus wurde nicht geändert, d. h. die Migration steht noch aus:

%Vor%

Getestet auf Schienen 4.2.3 mit dem mysql2 Juwel.

    
BoraMa 11.02.2016, 22:18
quelle
4

Sehr interessante Frage! Ich habe diesen Weg gefunden:

  1. Gehen Sie davon aus, dass Ihre Migration in der Datei db/migrate/20160102210050_create_items.rb und in CreateItems platziert wurde.
  2. Gehen Sie zur Rails-Konsole und laden Sie die Migrationsdatei:

    %Vor%
  3. Öffnen Sie die Transaktion, führen Sie die Migration und Rollback-Transaktion vor dem Festschreiben aus:)

    %Vor%

Wenn Sie SQL beim Rollback überprüfen möchten, rufen Sie einfach CreateItems.new.migrate :down in Schritt 3 auf. SQL wird ausgeführt und in der Datenbank getestet, aber nicht festgeschrieben - so können Sie Ihre Migration ohne Auswirkungen überprüfen.

    
Semjon 02.01.2016 21:33
quelle
1

Eine etwas tiefere Funktion, die für Ihren Zweck verwendet werden kann:

%Vor%     
shock_one 23.02.2016 14:10
quelle
-3

Sie können

tun %Vor%

und Rake testen die Aufgabe. Verwenden Sie dann eine der aufgelisteten Methoden, um das SQL zu erhalten, das ausgeführt werden würde.

    
Edward 06.04.2013 17:20
quelle

Tags und Links