2015-07-04 68 views
0

这是我的连接代码:如何使用新的Ruby MongoDB驱动程序连接到UNIX域套接字?

@mongo = Mongo::Client.new(
    config_require("mongo.uri"), 
    connect: :direct, 
    connect_timeout: 1, 
    server_selection_timeout: 1 
) 

begin 
    @mongo.database_names 
rescue Mongo::Error::NoServerAvailable 
    abort "Failed to connect to database" 
end 

这是我的配置文件:

mongo: 
    uri: "mongodb://127.0.0.1:9701/kvantel_toolkit" 

这个伟大的工程!

但只要将我的URI这样:

mongo: 
    uri: "mongodb:///home/tomas/mongodb/mongodb-9701.sock/my_project" 

它挂了一秒钟,无法连接。我还没有输入了错误的路径:

$ file /home/tomas/mongodb/mongodb-9701.sock 
/home/tomas/mongodb/mongodb-9701.sock: socket

According to the docs我似乎做的一切正确的:

下连接到UNIX域套接字:

mongodb:///tmp/mongodb-27017.sock

它还说,并不是所有的MongoDB驱动程序都必须支持UNIX域套接字,但this list of Ruby MongoDB 2.0 driver features表明它的确如此。

任何想法,为什么这不工作?


编辑:注意到,可能是相关的一些额外的信息。当我使用IP /端口创建一个客户端,client.cluster包含此:

#<Mongo::Cluster:0x19910340 
    servers=[#<Mongo::Server:0x19909540 address=127.0.0.1:9701>] 
    topology=Single>

但使用套接字创建客户端时,client.cluster包含此:

#<Mongo::Cluster:0x26553960 servers=[] topology=Single>

还要注意,这是在创建之后客户端,甚至在尝试连接到服务器之前。

回答

-1

问题在字符串//tmp/mongodb-9701.sock/my_project
Ruby驱动解析为目录,你可以尝试破解mongodb:///tmp/mongodb-9701.sock,localhost:9701/my_project

+0

这很难遵循。你的意思是你可以用localhost:9701/my_project替换mongodb:///tmp/mongodb-9701.sock行吗? –

+0

不是'mongodb:///home/tomas/mongodb/mongodb-9701.sock/my_projectt'和'mongodb:///tmp/mongodb-9701.sock,localhost:9701/my_project',两个主机之间用逗号分隔,并设置sudo chmod 777 /tmp/mongodb-27017.sock文件 –

相关问题