4

有很多与此类似的问题都在谈论将 rails 插件作为解决方案 - 但我没有使用 rails,请继续阅读以了解更多信息

我在一个 sinatra 项目中有一个 Rakefile,它允许我rake db:migrate. 它会完美地完成我的迁移,但我想传递一个标志(或编写一个新的 rake 任务),它做同样的事情,但将 SQL 输出到 STDOUT 并且不会将更改提交到数据库。有谁知道如何做到这一点?

我的第一个想法是尝试 ActiveRecord 日志记录,看看我是否可以得到 SQL,但这不起作用!有任何想法吗?

namespace :db do
    task :migrate_sql do
        require 'logger'

        ActiveRecord::Base.logger = Logger.new(STDOUT)

        Rake::Task['db:migrate'].invoke

        # This does the migration and doesn't output SQL - so no good!
    end
end
4

1 回答 1

0

我认为没有任何简单的方法可以做到这一点,原因如下:

  1. up, down, 和change是执行其他方法的方法;没有构建和执行的全局迁移查询字符串
  2. add_column语句方法(等)都不将它们的语句公开为字符串;据我了解,它们是作为连接适配器方法实现的,例如 mysql 适配器有一个add_column_sql 方法,而postgresql 适配器没有,它的 sql 是其add_column方法中的一个变量

所以,如果你真的需要这个功能,我认为你最好的选择是从日志中复制 sql。

于 2013-06-25T11:04:14.930 回答