Tôi muốn thêm chỉ mục vào cơ sở dữ liệu sản xuất. May mắn thay, chúng tôi đang chạy Postgres, cho phép lập chỉ mục đồng thời một cách độc đáo, vì vậy chúng tôi có thể thêm chỉ mục mà không có thời gian chết. Các chỉ mục đánh bắt - đồng thời không thể được thêm từ bên trong một giao dịch và việc di chuyển đường ray bao bọc mọi thứ bên trong một giao dịch.Làm thế nào để dừng Rails 3.1 di chuyển từ chạy trong một giao dịch?
May mắn thay, có điều gì đó trông giống như một giải pháp thực sự đơn giản: ghi đè phương thức riêng tư ActiveRecord :: Migration ddl_transaction, dưới dạng 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
Vấn đề là nó dường như không hoạt động trong Rails 3.1. Tôi làm chính xác những gì các mã trong Gist không, và đường ray dường như hoàn toàn bỏ qua nó. Bất kỳ ý tưởng về nơi để đi với điều này?
Bạn đã thử thay đổi định nghĩa phương pháp sao cho đó là một phương pháp lớp? ví dụ. 'def self.ddl_transaction (& block) ...' –