Есть ли команда быстрого рейка db: rollback для всех перемещений?Rake db: migrate - как мне отменить все миграции и переделать их
ответ
Хотя ответ @Orlandos правильный, rake db:reset
не переделает все миграции и, по его словам, загружает данные из последней схемы. Если вы хотите отменить все миграции, а затем повторить их, вы должны использовать:
rake db:migrate:reset #runs db:drop db:create db:migrate
Вы можете увидеть больше информации в этом посте: Difference between rake db:migrate db:reset and db:schema:load
просто используйте rake db:reset
, который удалит вашу базу данных (так же, как отменяет все миграции) и сбрасывается до последней схемы.
ОБНОВЛЕНИЕ: более правильный подход будет использовать rake db:migrate:reset
. Это снизит базу данных, создаст ее снова и запустит все миграции, вместо того, чтобы возвращаться к последней схеме.
Если вы действительно хотите откат всех миграций, а не просто взять базу данных в первозданном состоянии или к последней схеме, вы должны запустить:
rake db:migrate VERSION=0
Это на самом деле откатить весь путь вниз каждый миграции и ensu что каждая миграция обратима.
Если теперь выдавать
rake db:migrate:status
вы увидите, что все Миграции все еще есть, но они находятся в «вниз» (не применяется) состояние.
Другие команды, которые подразумевают rake db:reset
или rake db:drop
(например, в ответах по @Orlando или @Alex Falke) не будет никакого отката вообще: то есть, они не будут гарантировать, что каждая миграция является обратимой.
Кроме того, rake db:drop
не может быть запущен во время доступа к базе данных другими пользователями, в то время как откаты могут выполняться в реальном времени (даже если это обычно не рекомендуется). И последнее, но не менее важное: простое удаление и повторное создание базы данных также удалит таблицу миграции схем: если кто-то запустит rake db:migrate:status
после того, как база данных была удалена, ему ответит, что «таблица миграции схем еще не существует» и не будет иметь никаких подсказок о том, какие миграции могут быть применены (если он еще не знает об этом или не может их перечислить).
Ответ на реальный ответ –
Этот ответ следует выбрать, чтобы избежать путаницы. –
'rake db: migrate: reset' на самом деле не откат какой-либо миграции, вот на что действительно задается вопрос. –