繁体   English   中英

在连接到Heroku上的mongoDB时出现错误:“ localhost:27017:[Errno 111]连接被拒绝”,但在我的计算机上工作正常

[英]Getting error: “localhost:27017: [Errno 111] Connection refused” while connecting to mongoDB on Heroku but works fine on my computer

我正在使用PyMongo。 一切正常,并且可以正常连接到MongoDB,那是在我的计算机上,但是当我将脚本放在GitHub上并通过Heroku为Discord机器人运行它们时,我不断收到错误消息:

pymongo.errors.ServerSelectionTimeoutError:本地主机:27017:[Errno 111]连接被拒绝

我不知道为什么会这样,而它的作品在我的电脑上很好,我把pymongorequirements.txt 以下是我如何连接到MongoDB(使用PyMongo)的方法:

import pymongo
from pymongo import MongoClient, ReturnDocument
dbclient = MongoClient('mongodb://localhost:27017/')
# On Heroku I get error:"localhost:27017: [Errno 111] Connection refused"

在本地计算机上,您可以设置要使用的特定端口(例如27017)。 heroku会为您选择端口吗?

Heroku并不是可以在本地计算机上运行任意内容的主机。 您必须连接到非本地MongoDB主机,而不是localhost 一种简单的方法是选择一个合适的加载项并将其添加到您的应用程序中。

例如,您可能选择使用mlab MongoDB免费入门版本 您可以通过运行来配置此加载项

heroku addons:create mongolab:sandbox

该插件将为您设置环境变量MONGODB_URI ,您可以使用它连接:

import os

# Use the default argument if you don't want to have to set MONGODB_URI on your
# dev machine
mongodb_uri = os.getenv('MONGODB_URI', default='mongodb://localhost:27017/')

dbclient = MongoClient(mongodb_uri)

我决定不使用本地主机,因为我听不懂,我现在使用的是mongo DB提供的URL以及我的用户名和密码,您可以通过以下网址创建该用户名和密码:https://www.mongodb.com/cloud并创建一个项目,一个集群和集合,然后应向您提供url,该URL应该类似于此mongodb+srv://<username>:<password>@cluster-apc2i.mongodb.net/test?retryWrites=true&w=majority将该网址添加到您的脚本中,如下所示

client = MongoClient("mongodb+srv://<username>:<password>@cluster-apc2i.mongodb.net/test?retryWrites=true&w=majority")

还要确保将0.0.0.0/0添加到允许的ip中,该ip意味着所有具有详细信息的ip地址都可以访问,如果不添加,可能会出现错误,提示time out和其他URL在左侧的Database Access Pannel创建新用户后向您提供

您应该从/var/lib/mongodb删除mongod.lock锁。之后,您可以重新启动服务。

您也可以尝试通过以下方式更改部分客户代码

client = MongoClient('localhost', 27017)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM