Comment restaurer une migration spécifique?

J’ai le fichier de migration suivant db\migrate\20100905201547_create_blocks.rb

Comment puis-je annuler spécifiquement ce fichier de migration?

 rake db:rollback STEP=1 

Est-ce un moyen de le faire si la migration que vous souhaitez annuler est la dernière appliquée. Vous pouvez remplacer 1 pour autant de migrations que vous souhaitez faire revenir.

Par exemple:

 rake db:rollback STEP=5 

Annulera également toutes les migrations ultérieures (4, 3, 2 et 1 également).

Comme suggéré dans les commentaires:

Pour restaurer une utilisation de migration spécifique:

 rake db:migrate:down VERSION=20100905201547 
 rake db:migrate:down VERSION=20100905201547 

annulera le fichier spécifique.


Pour trouver la version de toutes les migrations, vous pouvez utiliser cette commande:

 rake db:migrate:status 

Ou, simplement, le préfixe du nom de fichier de la migration est la version à annuler.


Voir l’entrée du guide Ruby on Rails sur les migrations.

Pour annuler la dernière migration que vous pouvez effectuer:

 rake db:rollback 

Si vous souhaitez annuler une migration spécifique avec une version, procédez comme suit:

 rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION 

Par exemple, si la version est 20141201122027, vous ferez:

 rake db:migrate:down VERSION=20141201122027 

pour restaurer cette migration spécifique.

rake db:migrate:down VERSION=your_migrations's_version_number_here

La version est le préfixe numérique du nom de fichier de la migration

Comment trouver la version :

Vos fichiers de migration sont stockés dans votre rails_root/db/migrate . Recherchez le fichier approprié à lequel vous souhaitez annuler et copier le numéro de préfixe.

par exemple

nom du fichier: 20140208031131_create_roles.rb alors la version est 20140208031131

Vous pouvez annuler votre migration en utilisant rake db:rollback avec différentes options.

Mais, selon votre exigence, la syntaxe a changé.

Si vous souhaitez annuler la dernière migration, vous pouvez l’utiliser.

 rake db:rollback 

ou

 rake db:rollback STEP=1 

Si vous souhaitez annuler le nombre de migrations en une fois, il vous suffit de transmettre un argument

 rake db:rollback STEP=n 

n est le nombre de migrations pour la restauration de la dernière migration.

Si vous souhaitez annuler une migration spécifique, vous devez transmettre la version de la migration dans la syntaxe suivante.

 rake db:migrate:down VERSION=xxxxx 

où xxxxx est le numéro de version de la migration.

Pour annuler la dernière migration que vous pouvez effectuer:

 rake db:rollback 

Si vous souhaitez annuler une migration spécifique avec une version, procédez comme suit:

 rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION 

Si le fichier de migration à restaurer s’appelait db/migrate/20141201122027_create_some_table.rb , la version de cette migration est 20141201122027 , qui 20141201122027 l’horodatage de la création de la migration et la commande d’annulation de cette migration est la 20141201122027 :

 rake db:migrate:down VERSION=20141201122027 

Rétrograder la dernière migration:

 # rails < 5.0 rake db:rollback # rails >= 5.0 rake db:rollback # or rails db:rollback 

Annulation du dernier nombre de migrations

 # rails < 5.0 rake db:rollback STEP=2 # rails >= 5.0 rake db:rollback STEP=2 # or rails db:rollback STEP=2 

Faire reculer une migration spécifique

 # rails < 5.0 rake db:migrate:down VERSION=20100905201547 # rails >= 5.0 rake db:migrate:down VERSION=20100905201547 # or rails db:migrate:down VERSION=20100905201547 

S’il s’agit d’une migration réversible et du dernier exécuté, exécutez rake db:rollback . Et vous pouvez toujours utiliser la version. par exemple

le fichier de migration est 20140716084539_create_customer_stats.rb, donc la commande rollback sera, rake db:migrate:down VERSION=20140716084539

Les migrations modifient l’état de la firebase database à l’aide de la commande

 $ bundle exec rake db:migrate 

Nous pouvons annuler une seule étape de migration en utilisant

  $ bundle exec rake db:rollback 

Pour revenir au début, nous pouvons utiliser

  $ bundle exec rake db:migrate VERSION=0 

Comme vous pouvez le deviner, la substitution de tout autre nombre par 0 entraîne la migration vers ce numéro de version, où les numéros de version proviennent de la liste des migrations séquentiellement.

Guide De Rails

Rétablir les migrations précédentes

Vous pouvez utiliser la capacité d’Active Record à annuler les migrations à l’aide de la méthode de restauration:

 require_relative '20100905201547_create_blocks' class FixupCreateBlock < ActiveRecord::Migration def change revert CreateBlock create_table(:apples) do |t| t.string :variety end end end 

La méthode d'inversion accepte également un bloc d'instructions à inverser. Cela pourrait être utile pour annuler certaines parties des migrations précédentes. Par exemple, imaginons que CreateBlock est validé et qu'il soit décidé ultérieurement d'utiliser les validations Active Record, à la place de la contrainte CHECK, pour vérifier le code postal.

  class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration def change revert do # copy-pasted code from CreateBlock reversible do |dir| dir.up do # add a CHECK constraint execute <<-SQL ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5); SQL end dir.down do execute <<-SQL ALTER TABLE distributors DROP CONSTRAINT zipchk SQL end end # The rest of the migration was ok end end end 

La même migration aurait également pu être écrite sans utiliser revert, mais cela aurait impliqué quelques étapes supplémentaires: inverser l'ordre de create_table et réversible, remplacer create_table par drop_table et enfin remplacer par down et vice-versa. Ceci est tout pris en charge par revert.

Bien dans les rails 5 c’est assez facile rake db: migrer: status ou rails db: migrer: status

Il a été modifié pour gérer les deux de la même manière Puis choisissez simplement la version que vous souhaitez restaurer, puis exécutez rake db: migrer VERSION = 2013424230423

Assurez-vous que la version est en majuscules

Si vous rencontrez un problème avec une étape de la migration ou si vous êtes coincé au milieu, allez simplement dans le fichier de migration et mettez en commentaire les lignes déjà migrées.

J’espère que cela pourra aider

Si vous souhaitez annuler et migrer, vous pouvez exécuter:

 rake db:migrate:redo 

C’est la même chose que:

 rake db:rollback rake db:migrate