Mostrar migraciones pendientes en rieles

Respuestas:

258

rake db:migrate:status(Rieles 3 a 5) o rails db:migrate:status(Rieles 5) lograrán esto. Ver este compromiso .

upsignifica que la migración se ha ejecutado. downsignifica que la migración no se ha ejecutado.

jrdioko
fuente
Me estoy subiendo Don't know how to build task 'db:migrate:status'a los rieles 3.2.8
Peter Ehrlich
1
@PeterEhrlich: ¿No aparece en rake -Tlos otros pero sí?
jrdioko
2
db rake db ejecutivo: migrar: estado
Nadeem Yasin
2
¿Cómo se lee la salida de este comando? Si el estado de una fila es "inactivo", ¿eso significa que es una migración pendiente?
Dennis
12
upsignifica que la migración se ha ejecutado. downsignifica que la migración no se ha ejecutado.
Josh
37

La hay rake db:abort_if_pending_migrations(al menos en Rails 2.3.3, no estoy seguro de cuándo se introdujo). La descripción dice 'Genera un error si hay migraciones pendientes'. Esto parece usarse más como un requisito previo para otras tareas, pero supongo que podría usarlo para sus propósitos.

EDITAR: Aquí hay un ejemplo de la salida después de haber generado y no ejecutar una migración de 'prueba'

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
fuente
Me encanta agregar esto para orquestar dependencias entre contenedores de rieles
Vincent De Smet
Todavía allí en Rails 4.1.16
Magne
También funciona en los carriles 5.1.3
Wilson Silva
16

Este comando enumerará todas las migraciones con su estado ( UPo DOWN)

Carriles 3 y 4

rake db:migrate:status

Carriles 5

rake db:migrate:status

# Or

rails db:migrate:status
Deepak Mahakale
fuente
15

rake db:version logrará esto en Rails 2.

Gerryster
fuente
También válido en rieles 3.2.18
Ian Vaughan
6

Esto funciona para rieles 5.2

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

Pruebe rake -h (ayuda) y eche un vistazo a rake -n (= rake --dry-run). Entonces, probablemente algo así como rake -n db: migrate debería darte lo que quieres.

John Lockwood
fuente
2
Eso no funcionará. Simplemente imprime: ** Invocar db: migrate (first_time) ** Invocar entorno (first_time) ** Ejecutar (ejecución en seco) entorno ** Ejecutar (ejecución en seco) db:
migrate
2

Puede que no sea exactamente lo que está pidiendo OP, pero si solo necesita verificar rápidamente si hay alguna migración pendiente para su uso en una tarea de rastrillo, sin recurrir a

rake db: migrate: estado | grep down (podría no funcionar si estás en Windows)

ActiveRecord :: Migration.check_pending! (plantea ActiveRecord :: PendingMigrationError que necesita rescatar)

puedes usar needs_migration? Método: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class

wondersz1
fuente
2
ActiveRecord::Migrator.needs_migration?en Rails 5.1
niborg
1

Siguiente comando para verificar el estado de la migración:

rake db:migrate:status

O

cuando ejecute su servidor, mostrará un mensaje para ejecutar primero su migración pendiente.

puneet18
fuente
1

Si desea ver cuánta migración se realiza o está pendiente, puede ver el siguiente comando.

rails db:migrate:status

Más en este enlace: Rails Active Record Migration

Foram Thakral
fuente
1

Si necesita un bash one-liner para determinar si ejecutar una migración o no (por ejemplo, migrar solo en un comando de fase de lanzamiento de Heroku cuando hay una migración pendiente), esto funciona:

(rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."
niborg
fuente