Esiste un'attività di rake che mostra le migrazioni in sospeso in un'app rails?
Esiste un'attività di rake che mostra le migrazioni in sospeso in un'app rails?
Risposte:
rake db:migrate:status
(Rotaie da 3 a 5) o rails db:migrate:status
(Rotaie 5) lo faranno. Vedi questo commit .
up
significa che la migrazione è stata eseguita. down
significa che la migrazione non è stata eseguita.
rake -T
ma lo fanno gli altri?
up
significa che la migrazione è stata eseguita. down
significa che la migrazione non è stata eseguita.
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.
Questo comando elencherà tutte le migrazioni con il loro stato ( UP
o DOWN
)
Rotaie 3 e 4
rake db:migrate:status
Rotaie 5
rake db:migrate:status
# Or
rails db:migrate:status
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.
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
ActiveRecord::Migrator.needs_migration?
in Rails 5.1
Se vuoi vedere quanta migrazione è stata eseguita o in sospeso puoi vedere usando il comando seguente.
rails db:migrate:status
Maggiori informazioni su questo link: Rails Active Record Migration
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."
Don't know how to build task 'db:migrate:status'
su rotaia 3.2.8