Как обновить миграции при обновлении из приложения Rails 1.2.3?


Я обновляю приложение Rails 1.2.3 до 3.2.1.

Я пытаюсь понять, как я могу обновить структуру миграции, чтобы она была совместима с последней версией Rails, так что в идеале вы можете просто запустить rake db:migrate при настройке приложения. В настоящее время я решил эту проблему, просто выполнив rake db:migrate:up VERSION=[version_number] любой миграции, которую мне нужно запустить. Если я просто запускаю rake db:migrate, он пытается перезапустить все миграции с самого начала и останавливается (так как эти миграции уже были запущены в дампе БД, который у меня есть).

Миграции в приложении выглядят следующим образом 001_add_some_model.rb, 002_add_some_other_model.rb вместо 20120209182512_add_some_model.rb.

Есть ли у кого-нибудь опыт в этом? Как я могу это исправить?
3 5

3 ответа:

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

Не рекомендуется запускать все миграции для настройки новой базы данных даже в обновленном приложении Rails 3. Это объясняется в db / schema.РБ:

Обратите внимание, что эта схема.определение rb является авторитетным источником для вашего схема базы данных. Если вам нужно создать базу данных приложения на другом система, вы должны использовать db: schema: load, а не запускать все миграции с нуля. Последнее является ущербным и неустойчивым подходом (чем больше миграций вы будете накапливать, то медленнее он будет работать и большая вероятность проблем).

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

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

Это просто еще один способ сделать это и отражает мое собственное видение.