Ruby on Rails:как я могу вернуть миграцию с помощью rake db: migrate?


после установки 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 82

8 ответов:

run

rake db:migrate:down VERSION=<version>

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

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

rake db: migrate:down VERSION=3846656238

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

rake db:rollback

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

  1. опусти последние миграция:

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

  2. скатываются число (n) последние переносы:

    rake db:rollback STEP=n

  3. скатываются до ранее, конкретные версия:

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

номер версии означает SHA (Secure Hash Algorithm) для фиксации, которая представляет собой длинное шестнадцатеричное число, которое выглядит примерно как 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)

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

rake db:rollback STEP=3

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

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

rake db:rollback работает примерно в половине случаев. Я начинаю с этого.

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

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

rake db:migrate:redo

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

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

rails db:migrate:down VERSION=<version>

пример

rails db: migrate:down VERSION=20170330090327

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

rake db:migrate:status

или

bundle exec rake db:migrate:status

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

bundle exec rake db:migrate:down VERSION=