У меня есть следующий файл миграции db\migrate\20100905201547_create_blocks.rb
Как конкретно откатить этот файл миграции?
ruby-on-rails
schema
database-schema
rollback
AnApprentice
источник
источник
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-fileОтветы:
Есть способ сделать это, если миграция, которую вы хотите откатить, является последней примененной. Вы можете заменить 1 тем количеством миграций, которое хотите вернуться.
Например:
Также будет выполнен откат всей миграции, произошедшей позже (4, 3, 2, а также 1).
Чтобы откатить все миграции обратно (и включая) целевую миграцию, используйте: (Эта исправленная команда была добавлена ПОСЛЕ всех комментариев, указывающих на ошибку в исходном сообщении)
Чтобы откатить ТОЛЬКО ОДНУ конкретную миграцию (OUT OF ORDER), используйте:
Обратите внимание, что это НЕ отменит любые промежуточные миграции - только тот, который указан. Если это не то, что вы намеревались, вы можете безопасно запустить,
rake db:migrate
и он будет перезапущен только тот, пропуская другие, которые ранее не были откатаны.И если вы когда-нибудь захотите перенести одну миграцию не по порядку, есть и обратная сторона
db:migrate:up
:источник
STEP=-1
. Я сделал это однажды, и это сошло с ума, откатывая все назад. Не хорошо! Это был Rails 4.2 - думаю, это может быть исправлено.откатит конкретный файл.
Чтобы найти версию всех миграций, вы можете использовать эту команду:
Или просто префикс имени файла миграции - это версия, которую нужно откатить.
См. Руководство по Ruby on Rails по миграции.
источник
Для отката последней миграции вы можете сделать:
Если вы хотите откатить определенную миграцию с версией, вы должны сделать:
Например, если версия 20141201122027, вы будете делать:
откатить эту конкретную миграцию.
источник
Вы можете откатить миграцию, используя
rake db:rollback
различные параметры. Синтаксис будет отличаться в зависимости от ваших требований.Если вы хотите откатить только последнюю миграцию, то вы можете использовать либо
или
Если вы хотите откатить количество миграций сразу, вы просто передаете аргумент:
где
n
число миграций для отката, считая от последней миграции.Если вы хотите выполнить откат к определенной миграции, вы должны передать версию миграции следующим образом:
где xxxxx - номер версии миграции.
источник
rake db:migrate:down VERSION=your_migrations's_version_number_here
Версия - это числовой префикс в имени файла миграции.
Как найти версию :
Ваши файлы миграции хранятся в вашем
rails_root/db/migrate
каталоге. Найдите подходящий файл, до которого вы хотите выполнить откат, и скопируйте номер префикса.например
имя файла:
20140208031131_create_roles.rb
тогда версия20140208031131
источник
rake db:migrate:status
Откат последней миграции:
Откат последнего
n
количества миграцийОткат определенной миграции
источник
Для отката последней миграции вы можете сделать:
Если вы хотите откатить определенную миграцию с версией, вы должны сделать:
Если файл миграции, который вы хотите откатить, был вызван
db/migrate/20141201122027_create_some_table.rb
, то VERSION для этой миграции -20141201122027
это отметка времени, когда была создана эта миграция, и команда для отката этой миграции будет:источник
Если это обратимая миграция и последняя, которая была выполнена, запустите
rake db:rollback
. И вы всегда можете использовать версию. напримерфайл миграции - 20140716084539_create_customer_stats.rb, поэтому команда отката будет
rake db:migrate:down VERSION=20140716084539
источник
Чтобы откатить все миграции до определенной версии (например
20181002222222
), используйте:(Обратите внимание, что это использует
db:migrate
- не так,db:migrate:down
как в других ответах на этот вопрос.)Предполагая, что указанная версия миграции старше текущей версии, это откатит все миграции до указанной версии, но не включая ее.
Например, если
rake db:migrate:status
изначально отображается:Бег:
Приведет к:
Ссылка: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
источник
Из руководства по Rails
Возврат предыдущих миграций
Вы можете использовать возможность Active Record для отката миграций, используя
revert
метод:revert
Метод также принимает блок инструкций для заднего хода. Это может быть полезно для возврата выбранных частей предыдущих миграций. Например, давайте представим, что CreateBlock зафиксирован, и позже было решено, что будет лучше использовать проверки Active Record вместо ограничения CHECK для проверки почтового индекса.Та же самая миграция также могла быть написана без использования revert, но для этого потребовалось бы еще несколько шагов: изменение порядка create_table и reversible, замена create_table на drop_table и, наконец, замена up на down и наоборот. Это все позаботится о возвращении.
источник
Миграции изменяют состояние базы данных с помощью команды
Мы можем отменить один шаг миграции, используя
Чтобы вернуться к началу, мы можем использовать
Как вы можете догадаться, замена любого другого числа на 0 мигрирует к этому номеру версии, где номера версий происходят из списка последовательных миграций
источник
Что ж, в rails 5 это довольно просто: rake db: migrate: status или rails db: migrate: status
Он был изменен, чтобы обрабатывать их одинаково. Затем просто выберите версию, которую вы хотите откатить, и затем запустите rake db: migrate VERSION = 2013424230423
Убедитесь, что ВЕРСИЯ - все заглавные буквы
Если у вас есть проблема с каким-либо шагом миграции или вы застряли в середине, просто перейдите к файлу миграции и закомментируйте строки, которые уже были перенесены.
надеюсь, это поможет
источник
Если вы хотите выполнить откат и миграцию, вы можете запустить:
Это так же, как:
источник