İçeriğe geç

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.

ids.each_slice(100).map do |slice|
Thread.new do
User.where(id: slice).update_all(active: true)
end
end.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
end
end.each(&:join)

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.