【问题标题】:perl: cannot connect to mongodb serverperl:无法连接到 mongodb 服务器
【发布时间】: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 非常感谢所有帮助 - 我现在可以继续进行一些原型开发。

标签: mongodb perl


【解决方案1】:

默认情况下 MongoDB 服务器可用于 127.0.0.1 所以把 localhost 改成 127.0.0.1

如果你想自定义这个,那么你可以从其他计算机客户端访问这个 MongoDB 服务器查看这篇文章:https://www.linkedin.com/pulse/mongodb-server-service-windows-10-daniel-pe%C3%B1a/

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 2014-02-04
    • 2021-10-03
    • 2020-11-03
    • 2013-03-25
    • 2014-07-23
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多