gpt4 book ai didi

ruby-on-rails - 当池大小小于线程数时避免 ConnectionTimeoutError

转载 作者:数据小太阳 更新时间:2023-10-29 09:01:24 25 4
gpt4 key购买 nike

我能否确保连接池大小小于并发使用 ActiveRecord 连接的线程数?我希望线程池大小为一个。

我遇到错误:

could not obtain a database connection within 5.000       
conds (waited 5.000 seconds) ActiveRecord::ConnectionTimeoutError)

我正在尝试在我的本地机器上模拟它。但在这里我也面临着同样的错误。

@db_host  = "localhost"
@db_user = "root"
@db_pass = "root"
@db_name = "me_dev1"

ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => @db_host,
:database => @db_name,
:pool => 1,
:reaping_frequency => 1
)

class Test < ActiveRecord::Base
def create_data

100.times do |i|
t1=Thread.new {
begin
test=Test.where(:test_name => "automation test")
puts test
ensure
ActiveRecord::Base.connection.close if ActiveRecord::Base.connection ;
ActiveRecord::Base.clear_active_connections! ;
end
}
t1.join
end
end
end

Test.new.create_data

谢谢

最佳答案

ActiveRecord 为每个线程使用一个单独的连接。使此代码工作的可靠方法是使池大小大于或等于线程数。

如果您希望池大小小于线程数,您应该增加 ActiveRecord 等待从池中获取连接的时间量。这是通过 checkout_timeout 选项完成的,例如:

ActiveRecord::Base.establish_connection(  
...
checkout_timeout: 3_600, # wait an hour
)

关于ruby-on-rails - 当池大小小于线程数时避免 ConnectionTimeoutError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com