web-dev-qa-db-fra.com

Ruby sur Rails: Comment puis-je annuler une migration avec rake db: migrate?

Après avoir installé le modèle d’utilisateur de modèle, j’ai eu ceci.

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable

      # t.encryptable
      # t.confirmable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
      # t.token_authenticatable


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

Maintenant, si je rake db: migrer la table des utilisateurs sera créée.

Comment puis-je annuler cette migration, c’est-à-dire comment puis-je supprimer la table des utilisateurs en utilisant à nouveau rake?

87
shibly

Lancer la commande suivante

rake db:migrate:down VERSION=<version>

<version> est le numéro de version de votre fichier de migration que vous souhaitez restaurer.

par exemple. si vous souhaitez annuler une migration avec le nom de fichier 3846656238_create_users.rb

rake db: migrate: down VERSION = 3846656238

140
Mahesh

Il suffit de lancer cette commande:

rake db:rollback
110
damienbrz

Je pense qu'il y a trois options disponibles pour annuler les migrations (elles se chevauchent également):

  1. Déroulez la dernière migration :

    rake db:migrate:down # Rails 2 seulement.

  2. Faites défiler un nombre (n) de migrations récentes:

    rake db:rollback STEP=n

  3. Faites défiler jusqu'à une version précédente, spécifique :

    $ rake db:migrate:down VERSION=nnn # Rails 3 (indiquez également le numéro de version).

Le numéro de version désigne le SHA (algorithme de hachage sécurisé) du commit, qui est un long nombre hexadécimal qui ressemble à 886af3194768917c78e ... Vous pouvez le voir en faisant git log

Vous pouvez voir ces commandes (et d’autres) avec leurs descriptions en utilisant rake -T db: _ qui pour Rails 3.2 inclut:

rake db:migrate         # Migrate the database (options: VERSION=x, VERBOSE=false)
rake db:migrate:status  # Display status of migrations
rake db:rollback        # Rolls the schema back to the previous version (specify steps w/ STEP=n)
62
Michael Durrant

Vous pouvez effectuer une annulation et spécifier le nombre de dernières migrations qui seront annulées, par exemple.

rake db:rollback STEP=3

pour les 3 dernières migrations.

13
bender
rake db:migrate:redo

Il va annuler et réappliquer la dernière migration.

9
keneth

En tant que nouveau programmeur (ou à d'autres nouveaux programmeurs)

rake db:rollback fonctionne environ la moitié du temps. Je commence par là.

Si non, rake db:migrate:down VERSION=3846656238

branchez VERSION pour le numéro de version de votre fichier de migration que vous souhaitez rétablir.

9
LukeBickleTWA

Pour Rails 5 on peut utiliser Rails command instead of rake

Rails db:migrate:down VERSION=<version>

exemple

Rails db: migrate: down VERSION = 20170330090327

4
Mihir Kumar Thakur

Exécutez cette commande dans votre terminal:

rake db:migrate:status

ou

bundle exec rake db:migrate:status

Il indique le statut, les ID de migration et le nom de la migration pour toutes les migrations que nous avons exécutées précédemment. sélectionnez votre identifiant de migration (c'est-à-dire votre numéro de version) et insérez cet identifiant dans la commande suivante après version = , et appuyez sur Entrée.

bundle exec rake db:migrate:down VERSION=
2
Arun JP

Comment annuler une migration

(1) Identifiez d'abord l'ID de migration

rake db:migrate:status

  • Copiez le numéro d'identification.

Identify the migration to roll back.

(2) Puis annulez la migration

rake db:migrate:down VERSION=20190802023239

  • Collez le numéro d'identification approprié ci-dessus. Bien sûr, dans votre cas, l'ID de migration sera différent! Utilisez l'ID de migration correct.

....... et maintenant vous êtes aux courses!

0
BKSpurgeon