2017-02-27 2 views
2

最近、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' Mongo Ruby 2.4 minPoolSizeオプトイン使用時の未定義メソッドエラー

を、これがエラーの原因: 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ルビードライバのバージョンはそこに保存? – eiko

+0

@eiko 'mongo(2.4.0)'、またfyi @ Anthonyのソリューションは – Tony

答えて

1

問題は、max_pool_sizeをminより大きく設定していないことです。デフォルトの最大値は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ルビークライアントのJIRAに。 APIの関心事なので、どのように処理したいのか分かりません。

それは、あなたがこのようなmin_pool_sizeより大きいmax_pool_size設定した場合は動作します:あなたは、URIを使用する必要がある場合の

MONGO_DB = Mongo::Client.new([ENV['MONGO_URL'], min_pool_size: 10, max_pool_size: 12) 

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

で働いていましたが、これはAskerのようにURL形式で試しましたか?私は実際にはurlオプションとハッシュオプションのバグかどうか疑問に思っていた。 – eiko

+1

@eiko yes - このバグは、urlまたはoptionsハッシュのいずれかと一緒に存在します。 – Anthony

関連する問題