Есть ли команда быстрого рейка db: rollback для всех перемещений?
Rake db: migrate - как мне отменить все миграции и переделать их
Ответ 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
и все работало нормально. Конечно, вы потеряете все данные!