2010-09-14 1 views
0

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

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

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

ответ

0

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

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

+0

Я в той же ситуации, что и вы. Вы когда-нибудь открывали исходное это решение? – weibel

+0

Я этого не сделал. И у меня нет компьютерного корпуса, который кодирует меня. Однако, с небольшим количеством исследований, вы можете легко сделать то же самое. Я не слишком хорошо помню, но, возможно, я посмотрел на этот ответ на другой вопрос: http://stackoverflow.com/a/1629474/241367. И, возможно, я посмотрел ссылку, которую он предоставил: http://www.misuse.org/science/2006/12/12/sql-logging-in-rails/. Я не реализовал все, что имела статья misuse.org в своем фрагменте кода. YMMV, надеюсь, что это поможет. – thekingoftruth

1

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

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

+1

diff должен быть выполнен для структуры таблицы для каждой таблицы и данных для schema_migrations, так как вы хотите иметь миграции в этой таблице. – hellvinz