Thread içinde ActiveRecord çağrısı (ARCH6043)
Anahtar ruby.async.activerecord-in-thread · Önem warning · Kategori async
ActiveRecord bağlantı havuzu thread başına bir bağlantı çeker. Spawn edilen thread’lerde bağlantıyı açıkça yönetmemek havuzu tüketir ve bağlantılar geri verilmez. Her thread çekirdek işini with_connection (veya checkout/checkin) içinde yapmalıdır.
Hatalı
Bölüm başlığı “Hatalı”ids.each_slice(100).map do |slice| Thread.new do User.where(id: slice).update_all(active: true) endend.each(&:join)ids.each_slice(100).map do |slice| Thread.new do ActiveRecord::Base.connection_pool.with_connection do User.where(id: slice).update_all(active: true) end endend.each(&:join)Düzeltme
Bölüm başlığı “Düzeltme”Thread içindeki her ORM çağrısını ActiveRecord::Base.connection_pool.with_connection ile sarın ki bağlantı havuza geri dönsün.