運用データベースにインデックスを追加します。幸いにも私たちはPostgresを実行しています。これは同時に並行してインデックスを作成できるため、ダウンタイムなしでインデックスを追加できます。キャッチ・コンカレント・インデックスはトランザクション内からは追加できません。また、レール・マイグレーションはトランザクション内のすべてをラップします。Rails 3.1の移行をトランザクション内で実行しないようにする方法はありますか?
幸運なことに、実際には単純なソリューションのように見えるものがあります。ActiveRecord :: Migrationプライベートメソッドddl_transactionをexplained hereとして上書きします。
class IndexUsersEmails < ActiveRecord::Migration
def ddl_transaction(&block)
block.call # do not start a transaction
end
def self.up
execute "CREATE INDEX CONCURRENTLY index_users_on_email ON users(email)"
end
end
問題は、Rails 3.1では機能しないように見えます。私はGistのコードがしていることを正確に行い、レールはそれを完全に無視するように見えます。これとどこに行くべきかについてのアイデアはありますか?
は、あなたはそれがクラスメソッドだように、メソッドの定義を変更しようとしたことがありますか?例えば'def self.ddl_transaction(&block)...' –