Ruby on Rails: как я могу отменить миграцию с помощью rake db: migrate? - PullRequest
86 голосов
/ 08 октября 2011

После установки devise MODEL User я получил это.

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

Теперь, если я выполню rake db: migrate, будет создана таблица пользователей.

Как я могу отменить эту миграцию, т.е. как я могу снова удалить таблицу пользователей, используя rake?

Ответы [ 8 ]

140 голосов
/ 08 октября 2011

Запустите следующую команду

rake db:migrate:down VERSION=<version>

где <version> - номер версии вашего файла миграции, который вы хотите восстановить.

например. если вы хотите отменить миграцию с именем файла 3846656238_create_users.rb

rake db: migrate: down VERSION = 3846656238

110 голосов
/ 08 октября 2011

Просто запустите эту команду:

rake db:rollback
62 голосов
/ 08 октября 2011

Я полагаю, что есть три варианта возврата миграций (они также перекрываются):

  1. Свернуть самую последнюю миграцию:

    rake db:migrate:down # только рельсы 2.

  2. Сверните число (n) из последних миграций:

    rake db:rollback STEP=n

  3. Свернуть до предыдущей, определенной версии:

    $ rake db:migrate:down VERSION=nnn # Рельсы 3 (укажите также номер версии).

Номер версии означает SHA (алгоритм безопасного хеширования) для фиксации, представляющий собой длинное шестнадцатеричное число, которое выглядит примерно как 886af3194768917c78e ... Это можно увидеть, выполнив git log

Вы можете увидеть эти команды (и другие) с их описаниями, используя rake -T db:, который для рельсов 3.2 включает в себя:

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)
13 голосов
/ 08 октября 2011

Вы можете выполнить откат и указать, сколько последних миграций будет откатано, например,

rake db:rollback STEP=3

для 3 последних миграций.

9 голосов
/ 10 февраля 2015

Как новый программист (или другим новым программистам)

rake db:rollback работает примерно вдвое меньше.Я начинаю там.

Если нет, rake db:migrate:down VERSION=3846656238

подключите VERSION для номера версии вашего файла миграции, который вы хотите восстановить.

9 голосов
/ 06 июня 2014
rake db:migrate:redo

Отмена и повторное применение последней миграции.

3 голосов
/ 31 марта 2017

Для рельсов 5 мы можем использовать rails command instead of rake

rails db:migrate:down VERSION=<version>

пример

rails db: migrate: down VERSION = 20170330090327

2 голосов
/ 09 августа 2016

Запустите эту команду в своем терминале:

rake db:migrate:status

или

bundle exec rake db:migrate:status

Показывает статус, идентификаторы миграции, имя миграции для всех миграций, которые мы выполняли ранее. выберите свой идентификатор миграции (т. е. номер версии) и введите этот идентификатор в следующую команду после version = ,,, и нажмите enter

bundle exec rake db:migrate:down VERSION=
...