【问题标题】:Mongolab refuses connectionsMongolab 拒绝连接
【发布时间】:2012-08-12 04:28:32
【问题描述】:

我正在开发一个向 Mongolab 提交数据的 Python 程序,但我遇到了一个奇怪的异常:

mongoengine.connection.ConnectionError: Cannot connect to database mongodb://<user>:
<password>@ds035617.mongolab.com:35617/<mydatabase>:
could not connect to localhost:27017: [Errno 10061] No connection could be made
because the target machine actively refused it

这是有问题的代码:

from mongoengine import *
connect('tablename', "mongodb://<user>:<password>@ds035617.mongolab.com:35617/<mydatabase>")

任何人对什么是错的有任何想法?

【问题讨论】:

  • 然后呢?远程机器显然阻止了通过防火墙的传入流量。你检查这个的任务......不是我们的......
  • 远程机器 (MongoLab) 没有阻止来自外部的连接(我为 MongoLab 工作:)。
  • @Maulwurfn,正如将指出的那样,远程计算机不一定会阻止传入流量。显然,在问这个问题之前,我做了一些自我检查;我不懒。

标签: python mongodb mlab


【解决方案1】:

我会检查几件事:

(1)为什么报错信息说系统正在尝试连接localhost:27017...?

(2) 为什么你的 mongodb URI 有“用户”和“密码”,而真正的用户名和密码应该是?

我的猜测是问题是(2),除非您为了发帖而隐藏用户名和密码。

如果您仍有问题,请发送电子邮件至 support@mongolab.com,我们可以与您一起深入挖掘。

-会

【讨论】:

  • 我完全不确定它为什么要连接到本地主机;我自己也想知道。也许mongoengine 设置了本地代理...?我无法想象为什么;我以前从来没有遇到过这个问题,所以从来没有出现过。至于(2),我实际上是在掩盖用户名和密码,并编辑了问题以反映这一点。
【解决方案2】:

我通常认为回答自己的问题的形式很糟糕,但我想出了(相当简单的)答案,并想记录下来以确保其他人也能得到它。

问题在于未将 host= 指定为 connect 函数中的关键字参数。正确的函数调用是:

from mongoengine import *
connect('tablename', host="mongodb://<user>:<password>@ds035617.mongolab.com:35617/<mydatabase>")

【讨论】:

【解决方案3】:

看起来您正在使用MongoDB URI 进行连接,但驱动程序将字符串解释为数据库名称并尝试连接到默认的 localhost:27017。根据mongoengine docs,您希望将该 URI 作为主机参数传递:


只要包含数据库名称,也支持 Uri 样式连接 - 只需将 uri 作为主机提供给 connect():

connect('project1', host='mongodb://localhost/database_name')

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多