【问题标题】:How can you get a sql script of changes from Rails migrations (for MySQL)?如何从 Rails 迁移(对于 MySQL)中获取更改的 sql 脚本?
【发布时间】:2010-09-14 21:20:08
【问题描述】:

我见过http://github.com/muness/migration_sql_generator,但它在某些重要操作上不能与 MySQL 一起正常工作。有没有其他方法可以捕获 Rails 迁移过程中生成的 sql?

我问的原因是我无法在生产服务器上运行迁移,因为它由我公司的技术支持人员维护(并且从未被开发人员接触过)。开发人员向技术支持人员提供了一个 JRuby on Rails 战争文件,并通过 Tomcat 进行部署。但是说服技术支持来安装 JRuby 和 Rails 只是为了在生产环境中运行迁移绝对不是一件容易的事。我们希望保持部署非常简单,并尽可能减少依赖项。

我们只想为他们提供一个war文件和一个带有db更改的sql脚本。

【问题讨论】:

    标签: mysql ruby-on-rails jruby jrubyonrails rails-migrations


    【解决方案1】:

    您也许可以使用某种工具来生成两个数据库的差异。 here有一个问题。

    如果您在运行迁移之后将您的测试数据库与您的开发数据库进行比较,这可能是最简单的方法。甚至可能值得添加一个 rake 任务来完成它;让该 rake 任务依赖于迁移,然后您可以使用新任务而不是 rake db:migrate 在每次迁移时生成差异。

    【讨论】:

    • 应该对每个表的表结构和 schema_migrations 的数据进行比较,因为您希望在此表中进行迁移。
    【解决方案2】:

    我实际上最终创建了一个 rake 任务,它对 Activerecord 的 sql 执行方法进行了猴子修补,并将所有 sql 输出到日志文件 (log/database.log)。因此,该任务可以在db:migrate 之前运行,如下所示:rake db:log db:migrate。之后,您可以提取相关的语句并将它们放入 db/sql_migrations/<migration name>.sql 文件中,并让您的数据库管理员在准备好时运行它。

    谢天谢地,我换了工作,不必再处理那一团糟的流程了。 :)

    【讨论】:

    • 我的情况和你一样。你曾经开源过这个解决方案吗?
    • 我没有。而且我没有随身携带该代码的计算机。但是,通过少量研究,您可以轻松地做到这一点。我不太记得了,但我可能看过另一个 SO 问题的答案:stackoverflow.com/a/1629474/241367。我可能看过他提供的链接:misuse.org/science/2006/12/12/sql-logging-in-rails。我没有实现 misuse.org 文章在其代码 sn-p 中的所有内容。 YMMV,希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2020-03-14
    相关资源
    最近更新 更多