Mostrar migrações pendentes nos trilhos


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.


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.

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


6

Isso funciona para os trilhos 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

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.


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


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.



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."
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.