Mostra le migrazioni in sospeso nei binari


Risposte:


258

rake db:migrate:status(Rotaie da 3 a 5) o rails db:migrate:status(Rotaie 5) lo faranno. Vedi questo commit .

upsignifica che la migrazione è stata eseguita. downsignifica che la migrazione non è stata eseguita.


Sto salendo Don't know how to build task 'db:migrate:status'su rotaia 3.2.8
Peter Ehrlich,

1
@PeterEhrlich: non compare rake -Tma lo fanno gli altri?
jrdioko,

2
bundle exec rake db: migrate: status
Nadeem Yasin

2
Come leggi l'output di questo comando? Se lo stato di una riga è "inattivo", significa che è una migrazione in sospeso?
Dennis,

12
upsignifica che la migrazione è stata eseguita. downsignifica che la migrazione non è stata eseguita.
Josh,

37

C'è rake db:abort_if_pending_migrations(almeno in Rails 2.3.3, non sono sicuro di quando è stato introdotto). La descrizione dice "Genera un errore se ci sono migrazioni in sospeso". Questo sembra essere usato più come un prerequisito per altre attività, ma immagino che potresti usarlo per i tuoi scopi.

EDIT: ecco un esempio dell'output dopo aver appena generato e non eseguito una migrazione 'test'

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.

Adoro aggiungere questo per orchestrare le dipendenze tra i container delle rotaie
Vincent De Smet,

Ancora lì in Rails 4.1.16
Magne il

Funziona anche su binari 5.1.3
Wilson Silva,

16

Questo comando elencherà tutte le migrazioni con il loro stato ( UPo DOWN)

Rotaie 3 e 4

rake db:migrate:status

Rotaie 5

rake db:migrate:status

# Or

rails db:migrate:status


6

Funziona con le rotaie 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

2

Prova rake -h (aiuto) e dai un'occhiata a rake -n (= rake --dry-run). Quindi probabilmente qualcosa come rake -n db: migrare dovrebbe darti quello che vuoi.


2
Non funzionerà Stampa solo: ** Richiama db: migrate (first_time) ** Richiama ambiente (first_time) ** Execute (dry run) environment ** Execute (dry run) db: migrate
jrdioko

2

Potrebbe non essere proprio quello che l'OP sta chiedendo, ma se hai solo bisogno di verificare rapidamente se ci sono migrazioni in attesa di essere utilizzate in un'attività di rake, senza ricorrere a

rake db: migrate: status | grep down (potrebbe non funzionare se sei su Windows)

ActiveRecord :: Migration.check_pending! (genera ActiveRecord :: PendingMigrationError che devi salvare)

puoi usare needs_migration? metodo: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class


2
ActiveRecord::Migrator.needs_migration?in Rails 5.1
niborg,

1

Il seguente comando per controllare lo stato della migrazione:

rake db:migrate:status

O

quando si esegue il server, verrà visualizzato un messaggio per eseguire prima la migrazione in sospeso.



1

Se hai bisogno di un bash one-liner per determinare se eseguire o meno una migrazione (ad esempio, migra solo in un comando della fase di rilascio di Heroku quando c'è una migrazione in sospeso), funziona:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.