Ausstehende Migrationen in Schienen anzeigen

162

Gibt es eine Rake-Aufgabe, die die ausstehenden Migrationen in einer Rails-App anzeigt?

Schreibgeschützt
quelle

Antworten:

258

rake db:migrate:status(Schienen 3 bis 5) oder rails db:migrate:status(Schienen 5) erreichen dies. Siehe dieses Commit .

upbedeutet, dass die Migration ausgeführt wurde. downbedeutet, dass die Migration nicht ausgeführt wurde.

jrdioko
quelle
Ich Don't know how to build task 'db:migrate:status'steige auf Schienen 3.2.8
Peter Ehrlich
1
@PeterEhrlich: Erscheint es nicht in, rake -Taber die anderen?
jrdioko
2
Bundle Exec Rake DB: Migrieren: Status
Nadeem Yasin
2
Wie liest du die Ausgabe dieses Befehls? Wenn der Status einer Zeile "down" ist, bedeutet dies, dass eine Migration aussteht?
Dennis
12
upbedeutet, dass die Migration ausgeführt wurde. downbedeutet, dass die Migration nicht ausgeführt wurde.
Josh
37

Es gibt rake db:abort_if_pending_migrations(zumindest in Rails 2.3.3, nicht sicher, wann es eingeführt wurde). In der Beschreibung heißt es: "Löst einen Fehler aus, wenn Migrationen ausstehen". Dies scheint eher als Voraussetzung für andere Aufgaben zu dienen, aber ich vermute, Sie könnten es für Ihre Zwecke verwenden.

BEARBEITEN: Hier ist ein Beispiel für die Ausgabe, nachdem gerade eine Testmigration generiert und nicht ausgeführt wurde

rails_project theIV$ rake db:abort_if_pending_migrations
(in /Users/theIV/Sites/rails_project/)
You have 1 pending migrations:
  20090828200602 Test
Run "rake db:migrate" to update your database then try again.
theIV
quelle
Ich liebe es, dies hinzuzufügen, um Abhängigkeiten zwischen Schienencontainern zu orchestrieren
Vincent De Smet
Immer noch da in Rails 4.1.16
Magne
Funktioniert auch in Schienen 5.1.3
Wilson Silva
16

Dieser Befehl listet alle Migrationen mit ihrem Status ( UPoder DOWN) auf.

Schienen 3 und 4

rake db:migrate:status

Schienen 5

rake db:migrate:status

# Or

rails db:migrate:status
Deepak Mahakale
quelle
15

rake db:version wird dies auf Schienen 2 erreichen.

Gerryster
quelle
Auch gültig in Schienen 3.2.18
Ian Vaughan
6

Dies funktioniert für Schienen 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?
Sairam
quelle
2

Versuchen Sie es mit Rake -h (Hilfe) und sehen Sie sich Rake -n (= Rake - Trockenlauf) an. Also wahrscheinlich so etwas wie rake -n db: migrate sollte dir das bringen, was du willst.

John Lockwood
quelle
2
Das wird nicht funktionieren. Es wird nur gedruckt: ** Datenbank aufrufen: migrieren (first_time) ** Umgebung aufrufen (first_time) ** Umgebung ausführen (Trockenlauf) ** Ausführung ausführen (Trockenlauf) db: migrieren
jrdioko
2

Möglicherweise nicht ganz das, wonach OP fragt, aber wenn Sie nur schnell überprüfen müssen, ob Migrationen für die Verwendung in einer Rake-Aufgabe anstehen, ohne darauf zurückgreifen zu müssen

Rechen db: migrate: status | grep down (funktioniert möglicherweise nicht, wenn Sie unter Windows arbeiten)

ActiveRecord :: Migration.check_pending! (löst ActiveRecord :: PendingMigrationError aus, den Sie retten müssen)

Sie können Bedürfnisse_Migration verwenden? Methode: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class

wunderz1
quelle
2
ActiveRecord::Migrator.needs_migration?in Rails 5.1
Niborg
1

Folgender Befehl zum Überprüfen des Migrationsstatus:

rake db:migrate:status

ODER

Wenn Sie Ihren Server ausführen, wird eine Meldung angezeigt, dass Ihre ausstehende Migration zuerst ausgeführt werden soll.

puneet18
quelle
1

Wenn Sie sehen möchten, wie viel Migration durchgeführt wird oder aussteht, können Sie den folgenden Befehl verwenden.

rails db:migrate:status

Mehr zu diesem Link: Rails Active Record Migration

Foram Thakral
quelle
1

Wenn Sie einen Bash-Einzeiler benötigen, um zu bestimmen, ob eine Migration ausgeführt werden soll oder nicht (z. B. nur in einem Heroku-Release-Phasenbefehl migrieren, wenn eine Migration aussteht), funktioniert dies wie folgt:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
Niborg
quelle