Как отменить конкретную миграцию?

У меня есть следующий файл миграции db\migrate\20100905201547_create_blocks.rb

Как я могу откат этого файла миграции?

539
задан AnApprentice 05 сент. '10 в 23:30
источник поделиться
12 ответов
rake db:rollback STEP=1

Это способ сделать это, если последним был применен переход, который вы хотите откат. Вы можете заменить 1 на количество переходов, которые вы хотите вернуться.

Например:

rake db:rollback STEP=5

Откат также приведет к миграции всех последующих изменений (4, 3, 2, а также 1).

Как указано в комментариях:

Для отката используйте определенную миграцию:

rake db:migrate:down VERSION=20100905201547
852
ответ дан Zachary Wright 06 сент. '10 в 0:10
источник поделиться
rake db:migrate:down VERSION=20100905201547

откат конкретного файла.


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

rake db:migrate:status

Или просто префикс имени файла миграции - это версия, которую вам нужно отменить.


См. запись руководства Ruby on Rails при переносе.

759
ответ дан John Creamer 09 июля '11 в 17:36
источник поделиться

Чтобы отменить последнюю миграцию, вы можете сделать:

rake db:rollback

Если вы хотите отменить конкретную миграцию с помощью версии, которую вы должны выполнить:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

Например, если версия 20141201122027, вы будете делать:

rake db:migrate:down VERSION=20141201122027

для отката этой специфической миграции.

36
ответ дан Waleed 02 дек. '14 в 10:26
источник поделиться

rake db:migrate:down VERSION=your_migrations's_version_number_here

Версия представляет собой числовой префикс в имени файла миграции

Как найти версию:

Ваши файлы миграции хранятся в каталоге rails_root/db/migrate. Найдите соответствующий файл, для которого вы хотите откат, и скопируйте номер префикса.

например

имя файла: 20140208031131_create_roles.rb то версия 20140208031131

22
ответ дан Hardik 22 апр. '14 в 9:58
источник поделиться

вы можете отменить свою миграцию, используя rake db:rollback с различными параметрами.

Но в соответствии с вашим синтаксисом требований изменилось.

Если вы хотите отменить последнюю миграцию, вы можете ее использовать.

rake db:rollback

или

rake db:rollback STEP=1

Если вы хотите, чтобы количество отказов за один раз за один раз, вы просто передаете аргумент

rake db:rollback STEP=n

где n - это номер миграции для отката от последней миграции.

Если вы хотите откат определенной миграции, то вы должны передать версию миграции в следующем синтаксисе.

rake db:migrate:down VERSION=xxxxx

где xxxxx - номер версии миграции.

18
ответ дан uma 24 марта '14 в 10:54
источник поделиться

Чтобы отменить последнюю миграцию, вы можете сделать:

rake db:rollback

Если вы хотите отменить конкретную миграцию с помощью версии, которую вы должны выполнить:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

Если файл миграции, который вы хотите отменить, был вызван db/migrate/20141201122027_create_some_table.rb, тогда VERSION для этой миграции - 20141201122027, которая является меткой времени создания этой миграции, а команда для отката этой миграции:

rake db:migrate:down VERSION=20141201122027
13
ответ дан Sandip Vavhal 06 янв. '15 в 16:01
источник поделиться

Если это обратимая миграция и последняя, ​​которая была выполнена, запустите rake db:rollback. И вы всегда можете использовать версию. например

файл миграции - 20140716084539_create_customer_stats.rb, поэтому команда отката будет, rake db:migrate:down VERSION=20140716084539

6
ответ дан Santanu 28 июля '14 в 13:36
источник поделиться

Миграции изменяют состояние базы данных с помощью команды

$ bundle exec rake db:migrate

Мы можем отменить один шаг перехода, используя

  $ bundle exec rake db:rollback

Чтобы вернуться к началу, мы можем использовать

  $ bundle exec rake db:migrate VERSION=0

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

3
ответ дан Nirupa 06 мая '16 в 23:11
источник поделиться

Из Rails Guide

Возврат предыдущей миграции

С помощью метода revert вы можете использовать способность Active Record для отката миграции:

require_relative '20100905201547_create_blocks'

class FixupCreateBlock < ActiveRecord::Migration
  def change
    revert CreateBlock

    create_table(:apples) do |t|
      t.string :variety
    end
  end
end

Метод revert также принимает блок команд для изменения. Это может быть полезно для возврата выбранных частей предыдущих миграций. Например, предположим, что CreateBlock зафиксирован, и позже было решено, что лучше всего использовать проверки Active Record вместо ограничения CHECK, чтобы проверить zipcode.

    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

Такая же миграция также могла быть записана без использования revert, но это потребовало бы еще нескольких шагов: изменение порядка create_table и обратимость, замена create_table на drop_table и, наконец, замена вверх и вниз. Это все позаботится о возврате.

2
ответ дан Manish Shrivastava 29 июня '15 в 11:05
источник поделиться

Хорошо в рельсах 5 это довольно легко rake db: migrate: status или rails db: migrate: status

Он был изменен так, чтобы обрабатывать то же самое Затем просто выберите версию, которую вы хотите отменить а затем запустить rake db: migrate VERSION = 2013424230423

Убедитесь, что VERSION - это заглавные буквы

Если у вас возникли проблемы с любым шагом миграции или застряли в середине, просто перейдите в файл миграции и закомментируйте строки, которые уже были перенесены.

Надеюсь, что поможет

2
ответ дан mahmoud shaheen 20 июля '16 в 20:07
источник поделиться

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

# rails < 5.0
rake db:rollback

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

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

# rails < 5.0
rake db:rollback STEP=2

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

Откат определенной миграции

# 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
1
ответ дан Deepak Mahakale 20 сент. '16 в 15:16
источник поделиться

Если вы хотите откат и переход, вы можете запустить:

rake db:migrate:redo

То же самое, что:

rake db:rollback
rake db:migrate
0
ответ дан Iwan B. 11 июня '15 в 23:51
источник поделиться

Другие вопросы по меткам