Bir üretim veritabanına bir dizin eklemek istiyorum. Neyse ki, eşzamanlı indekslemeye izin veren Postgres'i kullanıyoruz, bu yüzden kesinti olmadan bir endeks ekleyebiliriz. Yakalama eşzamanlı dizinler bir işlem içerisinden eklenemez ve raylar geçişler her şeyi bir işlemin içine kaydırır.Rails 3.1 geçişi bir işlemde çalışırken nasıl durdurulur?
Neyse ki, gerçekten basit bir çözüm gibi görünen bir şey var: ActiveRecord :: Migration private method ddl_transaction'ın üzerine yazarak 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
Sorun şu ki, Rails 3.1'de çalışmıyor gibi görünüyor. Gist’teki kodun tam olarak ne yaptığını yapıyorum ve raylar onu tamamen görmezden geliyor. Bununla nereye gideceğiniz hakkında bir fikrin var mı?
bunu bir sınıf yöntemi olacak şekilde yöntem tanımını değiştirerek denediniz mi? Örneğin. 'def self.ddl_transaction (& blok) ...' –