Доступ к программе поиска на 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 в вашем скрипте, и он должен работать без проблем, как описано здесь.

Другие вопросы по тегам