Existe-t-il une tâche de râteau qui montre les migrations en attente dans une application rails?
Existe-t-il une tâche de râteau qui montre les migrations en attente dans une application rails?
Réponses:
rake db:migrate:status
(Rails 3 à 5) ou rails db:migrate:status
(Rails 5) y parviendra. Voir ce commit .
up
signifie que la migration a été exécutée. down
signifie que la migration n'a pas été exécutée.
rake -T
mais les autres le font?
up
signifie que la migration a été exécutée. down
signifie que la migration n'a pas été exécutée.
Il y a rake db:abort_if_pending_migrations
(au moins dans Rails 2.3.3, je ne sais pas quand il a été introduit). La description dit «Génère une erreur s'il y a des migrations en attente». Cela semble être davantage utilisé comme prérequis pour d'autres tâches, mais je suppose que vous pourriez l'utiliser à vos fins.
EDIT: Voici un exemple de la sortie après avoir juste généré et non exécuté une migration 'test'
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.
Cette commande listera toutes les migrations avec leur statut ( UP
ou DOWN
)
Rails 3 et 4
rake db:migrate:status
Rails 5
rake db:migrate:status
# Or
rails db:migrate:status
Essayez rake -h (aide) et jetez un œil à rake -n (= rake --dry-run). Donc, probablement quelque chose comme rake -n db: migrate devrait vous apporter ce que vous voulez.
Ce n'est peut-être pas tout à fait ce que OP demande, mais si vous avez juste besoin de vérifier rapidement si des migrations sont en attente pour une utilisation dans une tâche rake, sans recourir à
rake db: migrer: état | grep down (peut ne pas fonctionner si vous êtes sous Windows)
ActiveRecord :: Migration.check_pending! (déclenche ActiveRecord :: PendingMigrationError que vous devez récupérer)
vous pouvez utiliser needs_migration? méthode: https://apidock.com/rails/v4.0.2/ActiveRecord/Migrator/needs_migration%3F/class
ActiveRecord::Migrator.needs_migration?
dans Rails 5.1
Si vous voulez voir combien de migration est effectuée ou en attente, vous pouvez voir en utilisant la commande ci-dessous.
rails db:migrate:status
En savoir plus sur ce lien: Rails Active Record Migration
Si vous avez besoin d'un bash one-liner pour déterminer s'il faut exécuter une migration ou non (par exemple, migrer uniquement dans une commande de phase de publication Heroku lorsqu'il y a une migration en attente), cela fonctionne:
(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'
sur les rails 3.2.8