2013-04-24 2 views

ответ

111

Хотя ответ @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

+8

Ответ на реальный ответ –

+3

Этот ответ следует выбрать, чтобы избежать путаницы. –

+0

'rake db: migrate: reset' на самом деле не откат какой-либо миграции, вот на что действительно задается вопрос. –

14

просто используйте rake db:reset, который удалит вашу базу данных (так же, как отменяет все миграции) и сбрасывается до последней схемы.

ОБНОВЛЕНИЕ: более правильный подход будет использовать rake db:migrate:reset. Это снизит базу данных, создаст ее снова и запустит все миграции, вместо того, чтобы возвращаться к последней схеме.

+8

Это не то, что вопрос хочет сделать. Если вы измените что-то в миграциях, он не будет обновлять изменения в схеме. –

+0

@Alex Falke получил правильный ответ на этот вопрос. – Qasim

+0

@ Qasim ответ обновлен :) – Orlando

16

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

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 после того, как база данных была удалена, ему ответит, что «таблица миграции схем еще не существует» и не будет иметь никаких подсказок о том, какие миграции могут быть применены (если он еще не знает об этом или не может их перечислить).

 Смежные вопросы

  • Нет связанных вопросов^_^