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

0

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

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

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

Теги:
rails-migrations
jruby
jrubyonrails

2 ответа

0
Лучший ответ

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

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

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

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

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

  • 1
    Дифференциал должен быть сделан для структуры таблицы для каждой таблицы и данных для schema_migrations, так как вы хотите иметь миграции в этой таблице.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню