【问题标题】:Ruby variable subsitution in method call方法调用中的 Ruby 变量替换
【发布时间】:2012-10-26 10:32:12
【问题描述】:

这里是红宝石菜鸟。对于我遇到的小问题的任何帮助将不胜感激。 我正在尝试将数组放入格式化为数组的连接字符串参数中。

我的数组如下:

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)

【问题讨论】:

    标签: ruby arrays mongodb variable-substitution


    【解决方案1】:

    根据文档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)
    

    【讨论】:

    • 您好 Stefan,感谢您的回复。作品!我之前实际上曾尝试过这种格式的替换。当我遇到错误时,我继续前进。我查看了我的配置文件,并且我的数组格式错误,因此出现错误。然后,我专注于其他方法来使其正常工作。感谢您及时回复。自我注意:始终检查您的配置文件。
    【解决方案2】:

    你已经有一个数组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)
    

    【讨论】:

    • 感谢您的回复。也有效!斯特凡在你之前到达那里。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多