我最近升级到Mongo Ruby驱动程序版本2.4。使用minPoolSize
作为选项时,我现在收到此错误:
NoMethodError: undefined method `dispatch' for nil:NilClass
from .../mongo-2.4.0/lib/mongo/operation/executable.rb:37:in `block in execute'
例如,这会导致错误:
with_options = "#{ENV['MONGO_URL']}?minPoolSize=10"
MONGO_DB = Mongo::Client.new(with_options)
MONGO_DB[:some_collection].find().first
几年前它看起来像this was talked about但除此之外,我找不到任何关于错误含义以及为什么我不能使用minPoolSize
的文档。
答案 0 :(得分:2)
问题是您没有设置大于最小值的max_pool_size
。默认最大值为5
,当驱动程序尝试从池中出列连接时,它会进行检查:
def create_connection
if @connections < max_size
@connections += 1
@block.call
end
end
此处@connections
为10但max_size
为5,因此此方法返回nil
。没有一个好的客户体验IMO所以I added a ticket对ruby客户端的JIRA。这是一个API问题,所以我不确定他们将如何处理它。
如果您将max_pool_size
设置为大于min_pool_size
,则会起作用:
MONGO_DB = Mongo::Client.new([ENV['MONGO_URL'], min_pool_size: 10, max_pool_size: 12)
如果您需要使用uri:
with_options = "#{ENV['MONGO_URL']}?minPoolSize=10&maxPoolSize=12"
MONGO_DB = Mongo::Client.new(with_options)
MONGO_DB[:example].find().first