Existe uma tarefa de rake que mostra as migrações pendentes em um aplicativo rails?
Existe uma tarefa de rake que mostra as migrações pendentes em um aplicativo rails?
Respostas:
rake db:migrate:status
(Rails 3 a 5) ou rails db:migrate:status
(Rails 5) conseguirá isso. Veja este commit .
up
significa que a migração foi executada. down
significa que a migração não foi executada.
rake -T
mas os outros aparecem ?
up
significa que a migração foi executada. down
significa que a migração não foi executada.
Existe rake db:abort_if_pending_migrations
(pelo menos no Rails 2.3.3, não tenho certeza de quando foi introduzido). A descrição diz 'Gera um erro se houver migrações pendentes'. Isso parece ser usado mais como pré-requisito para outras tarefas, mas acho que você pode usá-lo para seus propósitos.
EDIT: Aqui está um exemplo da saída depois de ter acabado de gerar e não executar uma migração de 'teste'
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.
Este comando listará todas as migrações com seus status ( UP
ou DOWN
)
Trilhos 3 e 4
rake db:migrate:status
Trilhos 5
rake db:migrate:status
# Or
rails db:migrate:status
Tente rake -h (ajuda) e veja rake -n (= rake --dry-run). Portanto, provavelmente algo como rake -n db: migrate deve obter o que você deseja.
Pode não ser exatamente o que o OP está pedindo, mas se você precisar verificar rapidamente se há alguma migração pendente para uso em uma tarefa de rake, sem recorrer a
rake db: migrate: status | grep down (pode não funcionar se você estiver no Windows)
ActiveRecord :: Migration.check_pending! (gera ActiveRecord :: PendingMigrationError que você precisa resgatar)
você pode usar needs_migration? método: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class
ActiveRecord::Migrator.needs_migration?
no Rails 5.1
Se você quiser ver quanta migração é feita ou pendente, veja o comando abaixo.
rails db:migrate:status
Mais neste link: Migração de registro ativo do Rails
Se você precisar de uma linha única do bash para determinar se deve executar uma migração ou não (por exemplo, migrar apenas em um comando de fase de liberação do Heroku quando houver uma migração pendente), isso funciona:
(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'
nos trilhos 3.2.8