Доступ к программе поиска на Heroku Bonsai с моего компьютера
Я пытаюсь проверить связь с моим экземпляром Elasticsearch (развернут через бонсай и Heroku). Я следовал их указаниям и стараюсь выполнить следующий код на моем компьютере:
from elasticsearch import Elasticsearch
from settings import BONSAI_URL
import re, logging
# Log transport details (optional):
logging.basicConfig(level=logging.INFO)
# Parse the auth and host from env:
bonsai = BONSAI_URL
print(bonsai)
auth = re.search('https\:\/\/(.*)\@', bonsai).group(1).split(':')
host = bonsai.replace('https://%s:%s@' % (auth[0], auth[1]), '')
# Connect to cluster over SSL using auth for best security:
es_header = [{
'host': host,
'port': 443,
'use_ssl': True,
'http_auth': (auth[0],auth[1])
}]
# Instantiate the new Elasticsearch connection:
es = Elasticsearch(es_header)
# Verify that Python can talk to Bonsai (optional):
es.ping()
Я получил следующее сообщение об ошибке:
elasticsearch.exceptions.ImproperlyConfigured: Root certificates are missing for certificate validation. Either pass them in using the ca_certs parameter or install certifi to use it automatically.
Я считаю, что эта ошибка происходит из-за того, что у меня нет сертификатов https, поэтому я использовал HTTP, удалив s
в URL и регулярное выражение и переключение use_ssl
ложно, но я получил следующую ошибку:
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))
Как я могу вставить данные со своего компьютера в asticsearch на Heroku?
2 ответа
Вы, вероятно, используете Python3. Проблема в вашей версии на Python и в поведении urlib.
Быстрое исправление может быть:
es_header = [{
'host': host,
'port': 443,
'use_ssl': True,
'http_auth': (auth[0],auth[1]),
'verify_certs': False
}]
Но этот путь небезопасен. Более определенное исправление может быть записано в ваших требованиях. Txt:
certifi
Введите в своем терминале:
pip install -r requirements.txt
В вашем файле, где вы запускаете эластичный поиск:
import certifi
Затем запустите точно такой же код, который вы запускали ранее, и он должен работать и будет защищен.
Проблема в том, что клиент не может найти корневые сертификаты (они находятся на компьютере, на котором вы запускаете код). Как указывает исключение, вы должны иметь возможность установить certifi
с pip
а потом просто import certifi
в вашем скрипте, и он должен работать без проблем, как описано здесь.