Подтвердить что ты не робот

Rake db: migrate - как мне отменить все миграции и переделать их

Есть ли команда быстрого рейка db: rollback для всех перемещений?

4b9b3361

Ответ 1

Откат всех миграций

Для отката всех миграций лучшим решением будет @Claudio Floreani:

rake db:migrate VERSION=0

Это откатит любые миграции без потери данных. Затем снова запустите все миграции с помощью

rake db:migrate

Сброс базы данных (это удалит все данные)

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

Сброс

rake db:migrate:reset #runs db:drop db:create db:migrate

Этот метод удаляет базу данных и снова запускает миграции.

Загрузка последней схемы

rake db:reset

Этот метод удалит базу данных и загрузит данные из последней схемы.

Вы можете увидеть больше информации в этом посте: Разница между rake db: migrate db: reset и db: schema: load

Спасибо @Claudio Floreani и всем пользователям, которые прокомментировали, чтобы улучшить ответ.

Ответ 2

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

rake db:migrate VERSION=0

Это приведет к откату на всех этапах миграции и гарантирует, что каждая миграция будет обратимой.

Если вы сейчас выпускаете

rake db:migrate:status

вы увидите, что все миграции все еще существуют, но они находятся в состоянии "вниз" (не применяется).

Другие команды, которые подразумевают rake db:reset или rake db:drop (например, в ответах @Orlando или @Alex Falke), вообще не будут откатываться: то есть они не будут гарантировать, что каждая миграция обратимым.

Кроме того, rake db:drop не может быть запущен во время доступа к базе данных другими пользователями, в то время как откаты могут выполняться в реальном времени (даже если это обычно не рекомендуется). И последнее, но не менее важное: простое удаление и повторное создание базы данных также удалит таблицу миграции схем: если кто-то запускает rake db:migrate:status после того, как база данных была удалена, ему ответят, что "таблица миграции схемы еще не существует" и будет иметь никакие подсказки о том, какие миграции могут быть применены (если он еще не знает об этом или не может их перечислить).

Ответ 3

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

UPDATE: более правильный подход будет использовать rake db:migrate:reset. Это приведет к сбросу базы данных, ее созданию снова и запустит все миграции, вместо того, чтобы вернуться к последней схеме.

Ответ 4

Если возникает проблема с правами доступа (как это случилось со мной), возможно, вы можете попытаться отбросить все таблицы базы данных, как я делал с rubymine (просто откройте окно инструмента базы данных, выберите все таблицы и щелкните правой кнопкой мыши → drop), это должно быть похоже на другие IDE. Некоторые таблицы, такие как sqlite_master и sqlite_sequence, были удобно проигнорированы при удалении.

Это позволило мне сделать

rails db:migrate

и все работало нормально. Конечно, вы потеряете все данные!