2017-02-27 24 views
2

我最近升級到蒙戈Ruby驅動程序版本2.4時蒙戈的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' 使用了MinPoolSize optoin

例如,這將導致錯誤: 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

您可以檢查您Gemfile.lock的,並告訴我:

MONGO_DB = Mongo::Client.new([ENV['MONGO_URL'], min_pool_size: 10, max_pool_size: 12) 
的,如果你需要使用URI

mongo db ruby​​驅動的版本保存在那裏? – eiko

+0

@eiko'蒙戈(2.4.0)',也僅供參考@安東尼的解決方案工作 – Tony

回答

1

的問題是,你不設置比分鐘max_pool_size更大。默認max是5當司機試圖出列從池中的連接,它做了檢查:

def create_connection 
     if @connections < max_size 
     @connections += 1 
     @block.call 
     end 
    end 

這裏@connections是10,但max_size爲5,因此該方法返回nil。對於Ruby客戶端的JIRA來說,這不是一個好的客戶端體驗,所以I added a ticket。這是一個API問題,所以我不確定他們將如何處理它。

如果設置max_pool_size大於min_pool_size這樣它將工作:

with_options = "#{ENV['MONGO_URL']}?minPoolSize=10&maxPoolSize=12" 
MONGO_DB = Mongo::Client.new(with_options) 
MONGO_DB[:example].find().first 
+0

你在URL的形式像提問者想這是使用?我一直在想,如果它實際上是一個與URL選項與哈希選項的錯誤。 – eiko

+1

@eiko是 - 這個錯誤與網址或選項散列一同出現。 – Anthony