Я видел http://github.com/muness/migration_sql_generator, но он не работает должным образом с MySQL для некоторых важных операций. Есть ли другой способ захвата sql, сгенерированного во время миграции рельсов?
Причина, по которой я спрашиваю, заключается в том, что я не могу выполнять миграции на производственном сервере, так как она поддерживается технической поддержкой (и никогда не затрагиваемой разработчиками) в моей компании. Разработчики предоставляют JRuby on Rails war файл для технической поддержки, и они развертывают его через Tomcat. Но убедительная техническая поддержка для установки JRuby и Rails просто для запуска миграции на производстве, определенно, не будет легкой. Мы хотим, чтобы развертывание было действительно простым и с максимально возможной зависимостью.
Мы хотим просто предоставить им военный файл и sql script с изменениями db.
На самом деле я создал задачу rake, которая обезвреживала метод sql-исполнения Activerecord, чтобы также выводить все sql в файл журнала (log/database.log
). Таким образом, задачу можно запустить прямо перед db:migrate
следующим образом: rake db:log db:migrate
. После этого вы можете извлечь соответствующие утверждения и поместить их в файл db/sql_migrations/<migration name>.sql
и запустить администраторов базы данных, когда они будут готовы.
К счастью, я сменил работу и больше не должен разбираться в этом беспорядке процесса.:)
Возможно, вы сможете использовать какой-то инструмент для создания diff двух баз данных. Здесь вопрос о здесь.
Если вы разложите тестовую базу данных с помощью базы данных разработки сразу после запуска миграции, которая, вероятно, будет самым простым способом. Возможно, даже стоит добавить задачу рейка, чтобы сделать это; получить эту задачу рейка, чтобы она зависела от миграции, и затем вы могли использовать новую задачу вместо rake db:migrate
для генерации diff при каждом переносе.