¿Hay una tarea de rastrillo que muestre las migraciones pendientes en una aplicación de rieles?
¿Hay una tarea de rastrillo que muestre las migraciones pendientes en una aplicación de rieles?
Respuestas:
rake db:migrate:status
(Rieles 3 a 5) o rails db:migrate:status
(Rieles 5) lograrán esto. Ver este compromiso .
up
significa que la migración se ha ejecutado. down
significa que la migración no se ha ejecutado.
rake -T
los otros pero sí?
up
significa que la migración se ha ejecutado. down
significa que la migración no se ha ejecutado.
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.
Este comando enumerará todas las migraciones con su estado ( UP
o DOWN
)
Carriles 3 y 4
rake db:migrate:status
Carriles 5
rake db:migrate:status
# Or
rails db:migrate:status
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.
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
ActiveRecord::Migrator.needs_migration?
en Rails 5.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
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."
Don't know how to build task 'db:migrate:status'
a los rieles 3.2.8