Ausstehende Migrationen in Schienen anzeigen


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.


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.

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


6

Dies funktioniert für Schienen 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

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.


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


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.



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."
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.