【发布时间】:2019-02-26 15:18:48
【问题描述】:
我在从我的 Perl 脚本连接到 mongodb 服务器时遇到问题。
- mongodb 服务器在 localhost 端口 27017 上运行正常
- 我可以通过 mongod shell 和 mongo Compass(社区版)访问 mongodb 服务器
但是在尝试通过 Perl 连接时,我收到了错误:
"MongoDB::SelectionError: No readable server available for matching read preference primary. MongoDB server status:
Topology type: Single; Member status:
localhost:27017 (type: Unknown, error: MongoDB::NetworkError: Could not
connect to 'localhost:27017': Bad address )"
简单的 perlscript 是:
use strict;
use Data::Dumper;
use open qw/:std :utf8/;
use IO::Handle;
use MongoDB;
#my $client = MongoDB->connect('mongodb://localhost');
# connect to localhost:27017
my $client = MongoDB::MongoClient->new(host => 'localhost', port => 27017);
my $db = $client->get_database( 'example');
my $people_coll = $db->get_collection('people');
$db->drop;
行:
my $client = MongoDB::MongoClient->new(host => 'localhost', port => 27017);
似乎不会引发错误,但尝试创建或修改 dbase 会。我已经查看了有关 mongodb 连接问题的类似问题,并尝试关闭防火墙,删除 /tmp/mongodb-27017.sock(尽管我无法在任何地方找到此文件)。
欢迎任何帮助!
【问题讨论】:
-
"Bad address" 是一个有趣的错误。那是
EFAULT。 -
@melpomene 我认为它实际上是
"Bad address ",末尾有一个空格。 -
可能由于某种原因无法解析本地主机。你能ping通本地主机吗?您可以尝试 127.0.0.1 代替 localhost 吗?你能展示一个通过 mongo shell 成功连接的例子吗?
-
您使用的是 IPv4 还是 IPv6? “为了支持 IPv6,您必须安装最新版本的 IO::Socket::IP。” - metacpan
-
@helmy 根据您的建议,通过明确声明 127.0.0.1 代替 localhost 解决了问题。 (ping 127.0.0.1 没问题)。我不确定为什么在我的 Perl 脚本中无法识别 localhost 非常感谢所有帮助 - 我现在可以继续进行一些原型开发。