问题描述
我有一个在 EC2 上运行的 Django 应用程序,它可以使用以下 django-haystack
配置连接到我的 AWS ElasticSearch:
haystack_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine','URL': os.environ.get('ELASTICSEARCH_URL','http://elasticsearch').strip(),'INDEX_NAME': 'my_index'
},}
if 'es.amazonaws.com' in haystack_CONNECTIONS['default']['URL']:
haystack_CONNECTIONS['default']['kwargs'] = {
'port': 443,'http_auth': AWS4AuthEncodingFix(
os.environ.get('AWS_ACCESS_KEY_ID').strip(),os.environ.get('AWS_SECRET_ACCESS_KEY').strip(),os.environ.get('ELASTIC_SEARCH_AWS_REGION','us-east-1').strip(),'es'),'use_ssl': True,'verify_certs': True,'connection_class': Requestshttpconnection,}
这工作正常,但现在为了调试目的,我需要从我的本地开发机器连接到生产 ElasticSearch。
为此,我创建了一个 SSH 隧道:
ssh -v -N -L localhost:9200:${ELASTICSEARCH_ENDOINT}:443 -i my_secret_pem_file.pem ${EC2_USERNAME}@${EC2_IP}
从 SSH 日志中我可以看到连接已建立,并且工作正常:
10:26 $ curl -k -X GET 'https://localhost:9200/_cat/indices?v'
health status index pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana-4 1 1 2 0 9.5kb 9.5kb
yellow open my_index 5 1 1150327 547242 2.2gb 2.2gb
(请注意,我必须将 -k
与 curl
一起使用才能绕过 SSL 验证,因为该证书对 localhost
无效。
为了从 django-haystack
连接,我在上面的配置中添加了以下 else
分支:
else:
haystack_CONNECTIONS['default']['kwargs'] = {
'port': 9200,'use_ssl': False,'verify_certs': False,}
当我启动我的 Django 应用程序并尝试执行搜索时,我看到 SSH 隧道上有一些活动:
debug1: Connection to port 9200 forwarding to ###REDACTED### port 443 requested.
但是,所有搜索都返回空结果集。
我错过了什么?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)