Ruby on rails 当池大小小于线程数时,避免ConnectionTimeoutError

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

我是否可以可靠地使连接池大小小于并发使用ActiveRecord连接的线程数?我希望线程池大小为1

我得到一个错误:

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
)  

我冒昧地编辑了你的问题,使标题和问题更加具体。如果我犯了错误,导致您的问题不再准确,请您回滚我的编辑好吗?