从我的电脑访问 Heroku Bonsai 上的 elasticsearch
Accesing elasticsearch on Heroku Bonsai from my computer
我正在尝试 ping 我的 Elasticsearch 实例(通过 Bonsai 和 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,方法是删除 URL 和正则表达式中的 s
并切换 use_ssl
为 False 但出现以下错误:
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))
如何将数据从我的计算机插入到 Heroku 上的 elasticsearch 中?
问题是客户端找不到根证书(这些证书存在于您 运行 正在编写代码的计算机上)。如异常所述,您应该能够安装 certifi
和 pip
,然后在您的脚本中安装 import certifi
,并且应该 运行 没有问题 as described here。
您可能正在使用 Python3。
问题在于您的 python 版本和 urlib 的行为方式。
快速修复可能是:
es_header = [{
'host': host,
'port': 443,
'use_ssl': True,
'http_auth': (auth[0],auth[1]),
'verify_certs': False
}]
但是这种方式并不安全。更明确的解决方法是在 requirements.txt:
中写下
certifi
在您的终端中输入:
pip install -r requirements.txt
在您实例化 elasticsearch 的文件中:
import certifi
然后启动您之前启动的完全相同的代码,它应该可以工作并且是安全的。
我正在尝试 ping 我的 Elasticsearch 实例(通过 Bonsai 和 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,方法是删除 URL 和正则表达式中的 s
并切换 use_ssl
为 False 但出现以下错误:
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))
如何将数据从我的计算机插入到 Heroku 上的 elasticsearch 中?
问题是客户端找不到根证书(这些证书存在于您 运行 正在编写代码的计算机上)。如异常所述,您应该能够安装 certifi
和 pip
,然后在您的脚本中安装 import certifi
,并且应该 运行 没有问题 as described here。
您可能正在使用 Python3。 问题在于您的 python 版本和 urlib 的行为方式。
快速修复可能是:
es_header = [{
'host': host,
'port': 443,
'use_ssl': True,
'http_auth': (auth[0],auth[1]),
'verify_certs': False
}]
但是这种方式并不安全。更明确的解决方法是在 requirements.txt:
中写下certifi
在您的终端中输入:
pip install -r requirements.txt
在您实例化 elasticsearch 的文件中:
import certifi
然后启动您之前启动的完全相同的代码,它应该可以工作并且是安全的。