Afficher les migrations en attente dans les rails

162

Existe-t-il une tâche de râteau qui montre les migrations en attente dans une application rails?

Lecture seulement
la source

Réponses:

258

rake db:migrate:status(Rails 3 à 5) ou rails db:migrate:status(Rails 5) y parviendra. Voir ce commit .

upsignifie que la migration a été exécutée. downsignifie que la migration n'a pas été exécutée.

jrdioko
la source
Je monte Don't know how to build task 'db:migrate:status'sur les rails 3.2.8
Peter Ehrlich
1
@PeterEhrlich: Cela n'apparaît pas rake -Tmais les autres le font?
jrdioko
2
bundle exec rake db: migrate: status
Nadeem Yasin
2
Comment lisez-vous la sortie de cette commande? Si l'état d'une ligne est "down", cela signifie-t-il qu'il s'agit d'une migration en attente?
Dennis
12
upsignifie que la migration a été exécutée. downsignifie que la migration n'a pas été exécutée.
Josh
37

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.
theIV
la source
J'adore ajouter ceci pour orchestrer les dépendances entre les conteneurs de rails
Vincent De Smet
Toujours là dans Rails 4.1.16
Magne
Fonctionne également dans les rails 5.1.3
Wilson Silva
16

Cette commande listera toutes les migrations avec leur statut ( UPou DOWN)

Rails 3 et 4

rake db:migrate:status

Rails 5

rake db:migrate:status

# Or

rails db:migrate:status
Deepak Mahakale
la source
15

rake db:version accomplira cela sur Rails 2.

gerryster
la source
Aussi valable dans les rails 3.2.18
Ian Vaughan
6

Cela fonctionne pour les rails 5.2

ActiveRecord::Base.connection.migration_context.needs_migration?
Sairam
la source
2

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.

John Lockwood
la source
2
Cela ne fonctionnera pas. Il imprime simplement: ** Invoke db: migrate (first_time) ** Invoke environment (first_time) ** Execute (dry run) environment ** Execute (dry run) db: migrate
jrdioko
2

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

wonderersz1
la source
2
ActiveRecord::Migrator.needs_migration?dans Rails 5.1
niborg
1

Commande suivante pour vérifier l'état de la migration:

rake db:migrate:status

OU

lorsque vous exécutez votre serveur, il affichera un message pour exécuter d'abord votre migration en attente.

puneet18
la source
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

Foram Thakral
la source
1

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."
niborg
la source