Mostrar migrações pendentes nos trilhos

162

Existe uma tarefa de rake que mostra as migrações pendentes em um aplicativo rails?

Somente leitura
fonte

Respostas:

258

rake db:migrate:status(Rails 3 a 5) ou rails db:migrate:status(Rails 5) conseguirá isso. Veja este commit .

upsignifica que a migração foi executada. downsignifica que a migração não foi executada.

jrdioko
fonte
Estou entrando Don't know how to build task 'db:migrate:status'nos trilhos 3.2.8
Peter Ehrlich
1
@ PeterEhrlich: Não aparece, rake -Tmas os outros aparecem ?
Jrdioko 11/11/12
2
pacote exec rake db: migrate: status
Nadeem Yasin 22/03
2
Como você lê a saída deste comando? Se o status de uma linha estiver "inativo", isso significa que é uma migração pendente?
Dennis
12
upsignifica que a migração foi executada. downsignifica que a migração não foi executada.
217 Josh Josh
37

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.
theIV
fonte
Adoro adicionando esta a dependências orquestrar entre recipientes trilhos
Vincent De Smet
Ainda existe no Rails 4.1.16
Magne
Funciona também nos trilhos 5.1.3
Wilson Silva
16

Este comando listará todas as migrações com seus status ( UPou DOWN)

Trilhos 3 e 4

rake db:migrate:status

Trilhos 5

rake db:migrate:status

# Or

rails db:migrate:status
Deepak Mahakale
fonte
15

rake db:version fará isso no Rails 2.

Gerryster
fonte
Também é válido no Rails 3.2.18
Ian Vaughan
6

Isso funciona para os trilhos 5.2

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

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.

John Lockwood
fonte
2
Isso não vai funcionar. Ele apenas imprime: ** Invoque db: migrate (first_time) ** Invoque environment (first_time) ** Execute (dry run) environment ** Execute (dry run) db: migrate
jrdioko
2

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

wondersz1
fonte
2
ActiveRecord::Migrator.needs_migration?no Rails 5.1
niborg
1

Seguinte comando para verificar o status da migração:

rake db:migrate:status

OU

quando você executa o servidor, ele exibe uma mensagem para executar a migração pendente primeiro.

puneet18
fonte
1

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."
Niborg
fonte