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.


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.

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


6

Esto funciona para rieles 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?

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.


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


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.



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."
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.