Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top