ruby-on-rails 没有{型号名称}的连接池

x8diyxa7  于 2023-03-04  发布在  Ruby
关注(0)|答案(1)|浏览(95)

bounty将在4天后过期。回答此问题可获得+100的声誉奖励。simo正在寻找来自声誉良好的来源的答案

我们有一个rails 4应用程序,它有一个预定的rake任务,这将产生sidekiq工作器,我们开始看到错误:

An ActiveRecord::ConnectionNotEstablished occured in background
Exception
No connection pool for User

config/initializers/leaked_connections.rb:44:in `connection_with_forbid_implicit'
lib/ads_apis/ads_geo_targeter_base.rb:75:in `seeder_sync_targeting'

简单来说就是:

user = User.find(user_id)

我们尝试在sidekiq设置中降低并发性,并在数据库设置中增加池大小,但没有解决这个问题,我们在应用程序中不断得到模型的No connection pool for
对此有何调查暗示?

oknrviil

oknrviil1#

看起来这个补丁很旧了,我们可以在这篇文章中看到它:https://medium.com/points-san-francisco/threading-with-rails-eeb843bfa20
文章提到这个补丁不适用于Rails5以上的版本,所以如果你的Rails应用程序仍然卡在Rails4上,这可能就是原因。
这个补丁也是为了减轻数据库的负载。但是基本上如果你的数据库池等于Rails_max_thread(考虑到你的网络服务器是Puma),那么它可能会在某个时候达到可用数据库连接的最大数量,然后需要匹配的资源(RAM,计算等)。那么我不太确定这个补丁在哪个方面会那么有用。
默认的Rails最大线程数是5,这经常在https://twitter.com/nateberkopec/status/1564689914830229504?s=20&t=2uzgF8xYNRzgWtjEJuvfEQ中讨论,但是您可以通过将线程数减少到3并增加Puma并发(Puma工作线程)来减轻数据库负载

相关问题