Получение сообщения об ошибке: «localhost: 27017: [Errno 111] Соединение отклонено» при подключении к mongoDB на Heroku, но на моем компьютере работает нормально - PullRequest
0 голосов
/ 02 июня 2019

Я использую PyMongo.Все отлично работает и может нормально подключаться к MongoDB, который находится на моем компьютере, но когда я помещаю скрипты на GitHub и запускаю их через Heroku для своего бота Discord, я продолжаю получать сообщение об ошибке:

pymongo.errors.ServerSelectionTimeoutError: localhost: 27017: [Errno 111] Соединение отклонено

Я не знаю, почему это происходит, когда на моем компьютере все работает нормально, я поместил pymongo в requirements.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"

Ответы [ 4 ]

0 голосов
/ 14 июня 2019

Я решил не использовать локальный хост, потому что я не мог этого понять, сейчас я использую URL-адрес, предоставленный Mongo DB, с моим именем пользователя и паролем, которые вы можете создать, перейдя в https://www.mongodb.com/cloud и создавпроект, кластер и коллекции, тогда вам должен быть предоставлен URL, URL должен быть примерно таким: mongodb+srv://<username>:<password>@cluster-apc2i.mongodb.net/test?retryWrites=true&w=majority добавить этот URL в ваш скрипт следующим образом:

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 слева

0 голосов
/ 02 июня 2019

Вы должны удалить блокировку mongod.lock из /var/lib/mongodb После этого вы можете перезапустить службу.

Также вы можете попытаться изменить часть кода клиента на

client = MongoClient('localhost', 27017)
0 голосов
/ 02 июня 2019

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)
0 голосов
/ 02 июня 2019

На вашем локальном компьютере вы можете установить конкретный порт для использования (например, 27017). Герои выбирает вместо вас порт?

...