Я использовал SchemaUpdate Hibernate для выполнения той же функции, что и миграции. На самом деле это проще, чем миграция, потому что каждый раз, когда вы запускаете свое приложение, оно проверяет структуру базы данных и синхронизирует ее с вашими сопоставлениями, поэтому нет лишних граблей: шаг db: migrate, и ваше приложение никогда не может быть рассинхронизировано с базой данных, в которой оно запущено против. Файлы сопоставления Hibernate не сложнее миграции Rails, поэтому, даже если вы не использовали Hibernate в приложении, вы могли бы им воспользоваться. Обратной стороной является то, что он не так гибок, как откат, миграция вниз и выполнение операторов DML. Как указано в комментариях, он также не удаляет таблицы или столбцы. Я использую отдельный метод, чтобы сделать это вручную как часть процесса инициализации Hibernate.
Я не понимаю, почему вы не могли использовать миграции Rails - если вы не возражаете против установки стека (Ruby, Rake, Rails), вам не придется трогать свое приложение.