rake db: миграция только облегчает миграцию.
Большие миграции все еще столь же трудны и требуют обдумывания изменений схемы с точки зрения того, что на самом деле должна делать база данных.
Во всяком случае, я думаю, что вы застряли, используя все это, потому что db: migrate - это не миграция, ориентированная на базу данных, - она действительно ориентирована на модель.
Обычно мне нравится использовать что-то вроде SQL Compare для перехода от текущей производственной схемы к следующей производственной схеме.
Я не склонен запускать несколько миграций, чтобы перейти от 1.0.1 (Release) -> 1.0.2 (Dev) -> 1.0.3 (Dev) -> 1.1.0 (Release) (т. Е. Разработчики сценариев использовали чтобы перейти к различным внутренним выпускам), потому что я хочу обновить промежуточную среду с одного производственного выпуска до следующего производственного выпуска непосредственно, как это будет происходить для производства. Всегда есть вероятность, что сценарии не будут работать с реальными данными (или они будут слишком медленными, или возникнут проблемы ссылочной целостности с реальными данными).
Что касается сценариев, то это доступно через SMO или с такими инструментами, как Red Gate или APEX SQLScript.