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.

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 .


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)


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.


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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.