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. updown、およびchangeは、他のメソッドを実行するメソッドです。構築および実行されるグローバル移行クエリ文字列はありません
  2. ステートメント メソッド (add_columnなど) もステートメントを文字列として公開しません。私が理解しているように、それらは接続アダプターメソッドとして実装されています。たとえば、mysql アダプターにはadd_column_sql メソッドがありますが、postgresql アダプターにはありません。その sql はそのadd_columnメソッド内の変数です。

したがって、この機能が本当に必要な場合は、ログから SQL をコピーするのが最善の方法だと思います。

于 2013-06-25T11:04:14.930 に答える