Как обновить миграции при обновлении из приложения 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 ответа:
Я думаю, что вы должны перезапустить свои миграции, отбросить все миграции, которые у вас есть, и создать новую миграцию с определениями ваших текущих моделей. Смотрите эту миграцию в качестве начального примера.
Не рекомендуется запускать все миграции для настройки новой базы данных даже в обновленном приложении Rails 3. Это объясняется в db / schema.РБ:
Обратите внимание, что эта схема.определение rb является авторитетным источником для вашего схема базы данных. Если вам нужно создать базу данных приложения на другом система, вы должны использовать db: schema: load, а не запускать все миграции с нуля. Последнее является ущербным и неустойчивым подходом (чем больше миграций вы будете накапливать, то медленнее он будет работать и большая вероятность проблем).
Вместо того, что было предложено, я бы создал новые миграции с нуля. Запустите все свои модели в текущем состоянии и создайте новые миграции для каждой из них, таким образом, вы все еще можете использовать возможности миграции позже, например, добавить столбец в таблицу или изменить тип столбца.
Если вы создадите подпаленную миграцию для всех ваших моделей, как было предложено, Вы потеряете трек модели в названии миграции.
Это просто еще один способ сделать это и отражает мое собственное видение.