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

Точно, что делает rake db: migrate do?

Используется ли rake db: migrate только добавлять новые миграции или он переносит все миграции/изменения и создает все новое?

Я думаю, что рейк бросает ошибку, потому что пытается получить доступ к атрибуту table в миграции 040, который был удален при миграции 042. Как-то моя БД и грабли не синхронизированы, и я хочу их исправить.

для вас эксперты там - часто для рейка выходить из синхронизации с миграциями? как я могу избежать этого (нет, я не вручную редактирую мои схемы или файлы рейка).

4b9b3361

Ответ 1

Каждый раз, когда вы создаете перенос с использованием сценариев (например, script/generate model...), новая миграция добавляется в правильный каталог, готовый к синхронизации с реальной базой данных.

Фактически rake db: перенесите только те проверки, которые по-прежнему необходимо применять к базе данных, не заботясь о предыдущих.

Конечно, если вы модифицируете базу данных, используя другие способы, вы можете получить внесинхронные вещи, потому что, как вы сказали, вы можете применить миграцию к чему-то, что изменилось под ним.

Ответ 2

Когда вы используете миграции рельсов, автоматически создается таблица с именем schema_migrations, которая отслеживает, какие миграции были применены, путем хранения номера версии каждой миграции (это число, которое префиксное имя миграции в файле имя, т.е. db/migrate/_20090617111204__migration.rb). Когда вы запускаете rake db:migrate для миграции, будут выполняться только миграции, которые не были выполнены ранее (т.е. Их версия не содержится в таблице) (по этой причине изменение уже выполненной миграции не будет иметь никакого эффекта, если db:migrate). При переносе вниз все версии, найденные в schema_migrations, которые больше, чем версия, которую вы откатываете назад, будут отменены.

Ответ 3

Переход означает, что вы переходите от текущей версии к более новой версии (как сказано в первом ответе). Использование rake db: migrate позволяет применять любые новые изменения к вашей схеме. Но если вы хотите откат к предыдущей миграции, вы можете использовать rake db: rollback для аннулирования новых изменений, если они неверно определены. Предостережение: при этом ваши данные будут потеряны.