2

ここにルビー初心者。私が抱えている小さな問題についての助けをいただければ幸いです。配列としてフォーマットされた接続文字列引数に配列を配置しようとしています。

私の配列は次のとおりです。

hosts = ["192.168.0.2:27017","192.168.0.3:27017"]

一度にすべての接続を呼び出しに置き換えることができるように、配列を引き離して配列のように構造化する必要があります。ホストの数はさまざまである可​​能性があるため、アレイ内にあるのはなぜですか。

hosts_mapped = hosts.map { |i| "'" + i.to_s + "'" }.join(",")

「192.168.0.2:27017」、「192.168.0.3:27017」を文字列として表示します...または、開始しようとした後に次のようなエラーが発生したため、配列にマップされた可能性があります接続。

@conn = Mongo::ReplSetConnection.new([hosts_mapped], :refresh_mode => :sync, :refresh_interval => 10)

Exception `Mongo::ConnectionFailure' at gems/mongo-1.7.0/lib/mongo/util/pool_manager.rb:282 - Cannot connect to a replica set using seeds '192.168.0.2:27017
Mongo::ConnectionFailure: Cannot connect to a replica set using seeds '192.168.0.2:27017

ご覧のとおり、最初のエントリのみを参照しているようです。この配列を構成ファイルに保持する必要があるので、これが上記の接続文字列に直接入らない理由です。私には、hosts_mappedを配列にマップし直したように見えますが、hosts_mappedを配置すると、正しい形式の文字列が得られます。

"192.168.0.2:27017","192.168.0.3:27017"

動作する接続文字列は次のようになります。

@conn = Mongo::ReplSetConnection.new(["192.168.0.2:27017","192.168.0.3:27017"], :refresh_mode => :sync, :refresh_interval => 10)

私がここでどこが間違っているのか誰かが知っていますか?

テストする完全なコード:

#!/usr/bin/ruby -d 
require "mongo" 
hosts = ["192.168.0.2:27017","192.168.0.3:27017"] 
hosts_mapped = hosts.map {|i| "'" + i.to_s + "'" }.join(",") @conn =
Mongo::ReplSetConnection.new([hosts_mapped], :refresh_mode => :sync,:refresh_interval => 10)
4

2 に答える 2

0

ドキュメントによるとMongo::ReplSetConnection.new、配列を取ることができます:

Mongo::ReplSetConnection.new(['localhost:30000', 'localhost:30001'])

すでに配列があるので、それを最初のパラメーターとして渡すことができます。

hosts = ["192.168.0.2:27017","192.168.0.3:27017"]
Mongo::ReplSetConnection.new(hosts)
于 2012-10-26T10:41:24.103 に答える
0

あなたはすでに配列を持っていますhosts = ["192.168.0.2:27017","192.168.0.3:27017"]

そして、@conn = Mongo::ReplSetConnection.new(["192.168.0.2:27017","192.168.0.3:27017"], :refresh_mode => :sync, :refresh_interval => 10)うまくいくなら、あなたがする必要があるのは

@conn = Mongo::ReplSetConnection.new(hosts, :refresh_mode => :sync, :refresh_interval => 10)
于 2012-10-26T10:41:39.500 に答える