使用minPoolSize optoin时,Mongo Ruby 2.4未定义方法错误

时间:2017-02-27 17:46:01

标签: ruby mongodb

我最近升级到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的文档。

1 个答案:

答案 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