2012-10-26 33 views
2

紅寶石noob在這裏。任何幫助我遇到的一個小問題將不勝感激。 我想將一個數組放入格式爲數組的連接字符串參數。方法調用中的紅寶石變量替換

我的陣列如下:

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) 

回答

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) 
+0

您15秒打我! – saihgala

+0

嗨Stefan,謝謝你的回覆。作品!我以前曾嘗試過使用這種格式進行替換。當我遇到錯誤時,我繼續前進。我看了一下我的配置文件,並且對數組進行了錯誤操作,所以爲什麼我得到一個錯誤。我當時專注於其他方法以使其工作。感謝你及時的答覆。注意自我:總是檢查你的配置文件。 –

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) 
+0

感謝您的回覆。也行!斯蒂芬在你面前那裏。 :( –