Как вы можете получить sql-скрипт изменений из миграций Rails (для MySQL)?

Я видел http://github.com/muness/migration_sql_generator, но это не работает правильно с MySQL для некоторых важных операций. Есть ли другой способ захватить sql, сгенерированный во время миграции на рельсы?

Причина, по которой я спрашиваю, заключается в том, что я не могу запускать миграции на производственном сервере, поскольку он поддерживается технической поддержкой (и никогда не затрагивается разработчиками) в моей компании. Разработчики предоставляют службе технической поддержки файл войны JRuby on Rails, и они развертывают его через Tomcat. Но убедить техподдержку установить JRuby и Rails только для того, чтобы выполнить миграцию в рабочей среде, определенно будет непросто. Мы хотим, чтобы развертывание было действительно простым и с минимальным количеством зависимостей.

Мы хотим просто предоставить им военный файл и сценарий sql с изменениями базы данных.


person thekingoftruth    schedule 14.09.2010    source источник


Ответы (2)


Возможно, вы сможете использовать какой-то инструмент для создания различий между двумя базами данных. Есть вопрос по этому здесь.

Если вы сравните свою тестовую базу данных с базой данных разработки сразу после запуска миграции, это, вероятно, будет самым простым способом. Возможно, для этого даже стоит добавить задачу rake; сделайте так, чтобы эта задача rake зависела от миграции, а затем вы могли бы использовать новую задачу вместо rake db:migrate для создания diff при каждой миграции.

person Shadwell    schedule 14.09.2010
comment
diff должен выполняться для структуры таблицы для каждой таблицы и данных для schema_migrations, поскольку вы хотите иметь миграции в этой таблице. - person hellvinz; 15.09.2010

На самом деле я создал задачу rake, которая исправила метод выполнения sql Activerecord, чтобы также выводить все sql в файл журнала (log/database.log). Итак, задача может быть запущена прямо перед db:migrate вот так: rake db:log db:migrate. После этого вы можете извлечь релевантные операторы и поместить их в файл db/sql_migrations/<migration name>.sql, чтобы администраторы вашей базы данных выполнили его, когда они будут готовы.

К счастью, я сменил работу, и мне больше не нужно иметь дело с этим беспорядком процесса. :)

person thekingoftruth    schedule 10.03.2011
comment
Я в такой же ситуации, как и вы. Вы когда-нибудь открывали исходный код этого решения? - person weibel; 21.05.2012
comment
Я не. И у меня нет с собой компьютера, в котором хранится этот код. Однако, проведя небольшое исследование, вы можете легко сделать то же самое. Я не слишком хорошо помню, но, возможно, я просмотрел этот ответ на другой вопрос SO: stackoverflow.com/a/1629474/241367 . И, возможно, я просмотрел предоставленную им ссылку: misuse.org/science/2006/12/12/sql-logging-in-rails. Я не реализовал все, что было в статье misuse.org во фрагменте кода. YMMV, надеюсь, это поможет. - person thekingoftruth; 16.06.2012