スレッド化されたアクティブレコードクエリを実行しようとしています。開発では適切にテストされますがPG::Error (FATAL: sorry, too many clients already)
、本番ではエラーが発生します。開発と本番の両方でまったく同じプールサイズを使用しています。これが私がスレッドで実行しようとしているコードのスニペットです:
threads = []
acs.each do |a|
threads << Thread.new do
activity = Hash.new
ActiveRecord::Base.connection_pool.with_connection do
whouser = User.find(a.whoid)
target = User.find(a.targetid) if !(a.targetid.blank?)
activity["user_name"] = whouser.user_name
activity["user_id"] = whouser.id
activity["f_uid"] = whouser.f_uid
....
end
end
end
threads.each { |t| t.join }
これに関する洞察は素晴らしいでしょう!
PS私は開発用コンピューターで本番と開発をテストしていますが、本番として実行しています。実際の本番サーバーでも同じ問題が発生しています。