簡體   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