Comment annuler une seule étape à l'aide de rake db: migrer

197

Après avoir ajouté des fichiers de migration dans le db/migratedossier et exécuté rake db:migrate, je veux revenir à l'étape précédente, je pense que l'utilisation VERSION=nest la bonne façon de le faire, mais je ne connais pas la valeur correcte de n à utiliser. Existe-t-il une commande pour vérifier la valeur n actuelle?

Ce serait formidable si quelqu'un pouvait fournir des instructions complètes sur la façon d'utiliser rake db:migrate.

mko
la source

Réponses:

356

Pour commencer

rake db:rollback vous ramènera d'un pas

puis

rake db:rollback STEP=n

Vous annulera les nmigrations où nest le nombre de migrations récentes que vous souhaitez annuler.

Plus de références ici .

rwilliams
la source
95

Annulez la migration la plus récente:

rake db:rollback

Annulez nles migrations les plus récentes:

rake db:rollback STEP=n

Vous pouvez trouver des instructions complètes sur l'utilisation des tâches de migration Rails pour le râteau dans le Guide Rails pour l'exécution des migrations .


En voici encore plus:

  • rake db:migrate - Exécutez toutes les migrations qui n'ont pas déjà été exécutées
  • rake db:migrate VERSION=20080906120000 - Exécutez toutes les migrations nécessaires (vers le haut ou vers le bas) pour accéder à la version donnée
  • rake db:migrate RAILS_ENV=test - Exécuter des migrations dans l'environnement donné
  • rake db:migrate:redo - Annulez une migration et exécutez-la à nouveau
  • rake db:migrate:redo STEP=n- Annulez les dernières nmigrations et relancez-les
  • rake db:migrate:up VERSION=20080906120000- Exécutez la upméthode pour la migration donnée
  • rake db:migrate:down VERSION=20080906120000- Exécutez la downméthode pour la migration donnée

Et pour répondre à votre question sur la provenance du numéro de version d'une migration:

La version est le préfixe numérique du nom de fichier de la migration. Par exemple, pour migrer vers la version 20080906120000, exécutez

$ rake db:migrate VERSION=20080906120000

(À partir de l' exécution des migrations dans les guides Rails)

Ajedi32
la source
2
Lorsque rake db: rollback ne fonctionnait pas pour annuler la migration la plus récente, j'ai dû utiliser rake db: migrate VERSION = <avant-dernière date de version> et cela a bien fonctionné
Omni
8

La meilleure façon est d'exécuter une migration particulière à nouveau en utilisant vers le bas ou vers le haut (dans les rails 4. C'est le changement)

rails db: migrate: up VERSION = horodatage

Maintenant, comment obtenir l'horodatage. Aller sur ce chemin

/ db / migrate

Identifiez le fichier de migration que vous souhaitez rétablir. Choisissez l'horodatage à partir de ce nom de fichier.

Hemali
la source
Bien que cela ne réponde pas à la question, c'est en effet la meilleure façon. Revenir en arrière par étapes peut provoquer des erreurs, en particulier lorsque vous travaillez sur un logiciel en groupe.
acier
5

Si la version est 20150616132425, utilisez:

rails db:migrate:down VERSION=20150616132425
Đoàn Nghĩa
la source
1

D'autres personnes vous ont déjà répondu comment annuler, mais vous avez également demandé comment identifier le numéro de version d'une migration.

  • rake db:migrate:status donne une liste de la version, du nom et de l'état de vos migrations (vers le haut ou vers le bas)
  • Vous pouvez également trouver le fichier de migration, qui contient un horodatage dans le nom de fichier, c'est-à-dire le numéro de version. Les migrations se trouvent dans le dossier:/db/migrate
BjarneD
la source
Soit dit en passant, si vous exécutez la commande status, vous pouvez voir des lignes comme: ********** NO FILE ********** Ces migrations n'existent pas sur votre branche actuelle si vous utilisez git.
BjarneD