Ruby on Rails: ¿Cómo puedo revertir una migración con rake db: migrate?

94

Después de instalar devise MODEL User obtuve esto.

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

Ahora, si hago rake db: migrate, se creará la tabla de usuarios.

¿Cómo puedo revertir esta migración, es decir, cómo puedo eliminar la tabla de usuarios usando rake nuevamente?

astutamente
fuente

Respuestas:

147

Ejecute el siguiente comando

rake db:migrate:down VERSION=<version>

donde <version>es el número de versión de su archivo de migración que desea revertir.

p.ej. si desea revertir una migración con el nombre de archivo 3846656238_create_users.rb

rake db: migrate: down VERSION = 3846656238

Mahesh
fuente
Recibo un mensaje, UnknownMigrationVersionErrorpero me di cuenta de que es porque mis migraciones están adentro db/migrate/main, ¿alguien sabe una solución para que esto pueda db:migrate:downver dentro de ese directorio específico o los subdirectorios de migración?
tf.rz
Esto es solo para los rieles 3 en adelante. Mi vida está en raíles 2. Muy triste
morhook
@morhook Esto también funciona para rieles 3. Consulte los documentos aquí guides.rubyonrails.org/v3.2/migrations.html
Mahesh
¡Tienes razón! Funciona tanto para los rieles 2 como para los rieles 3. ¡Gracias @Mahesh por tu aporte!
morhook
114

Simplemente ejecute este comando:

rake db:rollback
Damienbrz
fuente
65

Creo que hay tres opciones disponibles para revertir las migraciones (también se superponen):

  1. Despliegue la migración más reciente :

    rake db:migrate:down # Solo rieles 2.

  2. Despliegue hacia abajo un número (n) de migraciones recientes:

    rake db:rollback STEP=n

  3. Desplácese hacia abajo a una versión específica anterior :

    $ rake db:migrate:down VERSION=nnn # Rails 3 (proporcione también el número de versión).

Número de versión significa SHA (algoritmo hash seguro) para la confirmación, que es un número hexadecimal largo que se parece a 886af3194768917c78e ... Puede verlo haciendo git log

Puede ver estos comandos (y otros) con sus descripciones usando rake -T db:que para rails 3.2 incluye:

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)
Michael Durrant
fuente
5
rake db:migrate VERSION=<version number>
Desplácese
3
Al menos para rails 3.0.20, el primer comando es incorrecto. Un único rake db:migrate:downaborto con el mensaje de error "Se requiere VERSIÓN". Sin embargo, lo recomendado rake db:rollback funciona.
martin
Como se detalla en la respuesta, Rails 2 SOLO para el primer comando.
Michael Durrant
1
Las variables de entorno distinguen entre mayúsculas y minúsculas, por lo que debería serlo STEPyVERSION
Kostas Rousis
Para aclarar, $ rake db:migrate:down VERSION=nnnno se reduce a una versión, se migra a la versión especificada.
johnml
15

Puede revertir y especificar cuántas últimas migraciones se revertirán, p. Ej.

rake db:rollback STEP=3

para 3 últimas migraciones.

juerga
fuente
esta es una forma más rápida y fácil, en lugar de buscar los números de versión si desea deshacer las últimas migraciones
Pre-alpha
11

Como programador nuevo (o para otros programadores nuevos)

rake db:rollbackfunciona aproximadamente la mitad del tiempo. Empiezo por ahí.

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

inserte VERSION para el número de versión de su archivo de migración que desea revertir.

LukeBickleTWA
fuente
10
rake db:migrate:redo

Deshacerá y volverá a aplicar la última migración.

keneth
fuente
5

Para rieles 5 podemos usar rails command instead of rake

rails db:migrate:down VERSION=<version>

ejemplo

rails db: migrate: down VERSION = 20170330090327

Mihir Kumar Thakur
fuente
2

Ejecute este comando en su terminal:

rake db:migrate:status

o

bundle exec rake db:migrate:status

Muestra el estado, los ID de migración y el nombre de la migración de todas las migraciones que ejecutamos anteriormente. seleccione su ID de migración (es decir, su número de versión) y coloque ese ID en el siguiente comando después de version = ,,, y presione enter

bundle exec rake db:migrate:down VERSION=
Arun JP
fuente
0

Cómo revertir una migración

(1) Primero identifique el ID de migración

rake db:migrate:status

  • Copie el número de identificación.

Identifique la migración para revertir.

(2) Luego, revertir la migración

rake db:migrate:down VERSION=20190802023239

  • Pegue el número de identificación correspondiente arriba. Por supuesto, en su caso, el ID de migración será diferente. Utilice el ID de migración correcto.

....... y ahora te vas a las carreras!

BKSpurgeon
fuente