Ruby on rails 当池大小小于线程数时,避免ConnectionTimeoutError
我是否可以可靠地使连接池大小小于并发使用ActiveRecord连接的线程数?我希望线程池大小为1 我得到一个错误:Ruby on rails 当池大小小于线程数时,避免ConnectionTimeoutError,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,我是否可以可靠地使连接池大小小于并发使用ActiveRecord连接的线程数?我希望线程池大小为1 我得到一个错误: could not obtain a database connection within 5.000 conds (waited 5.000 seconds) ActiveRecord::ConnectionTimeoutError) 我试着在我的本地机器上模拟它。但在这里,我也面临着同样的错误 @db_host = "localhost" @db_user
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
@db\u host=“localhost”
@db_user=“root”
@db_pass=“root”
@db_name=“me_dev1”
ActiveRecord::Base.建立\u连接(
:adapter=>“mysql2”,
:host=>@db\u host,
:database=>@db\u name,
:pool=>1,
:收割频率=>1
)
类测试“自动化测试”)
测试
确保
如果ActiveRecord::Base.connection,则关闭ActiveRecord::Base.connection;
ActiveRecord::Base.clear_active_connections;
结束
}
t1.加入
结束
结束
结束
Test.new.create_数据
谢谢,ActiveRecord为每个线程使用单独的连接。使此代码工作的可靠方法是使池大小大于或等于线程数 如果希望池大小小于线程数,则应增加ActiveRecord从池中获取连接的等待时间。这是通过
签出超时
选项完成的,例如:
ActiveRecord::Base.establish_connection(
...
checkout_timeout: 3_600, # wait an hour
)
我冒昧地编辑了你的问题,使标题和问题更加具体。如果我犯了错误,导致您的问题不再准确,请您回滚我的编辑好吗?