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

Включает ли schema_migrations только новые миграции или же он переносит все миграции / изменения и создает все новое?

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

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

ruby-on-rails,migration,rake,

21

Ответов: 3


16 принят

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

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

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


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


5 ов

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

рубин-на-рельсы, миграция, грабли,
Похожие вопросы
Яндекс.Метрика