SearchBackend 是 Wagtail 后台提供搜索的服务后端,支持Database ElasticSearch等。
最近进行框架升级 2.14 -> 3.0.1,升级后出现了一些问题,其中一个就是搜索功能无法正常使用了
经过调试查找Google等一堆操作后确定是一个bug(这句就是废话), 这个问题应该是从2.15版本产生的
去 Wagtail的主页下看看,最终发现很久之前就有人提过Issue了,瞬间痛哭流涕,他乡遇故知啊。issue中倒是也有提供了解决思路,但是感觉不太好,也并不能完全解决。
最终决定切换到Backend试一试,本地搭了个ElasticSearch,简单配置一下,功能正常使用。
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch7',
'URLS': ['http://localhost:9200'],
'INDEX': 'wagtail_search',
'TIMEOUT': 5,
'OPTIONS': {},
'INDEX_SETTINGS': {},
}
}
于是就写申请要一个生产的elasticsearch服务,给了个地址配上去
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch7',
'URLS': ['https://user-name:pwd@10.xx.xx.104:9200'],
'INDEX': 'wagtail_search',
'TIMEOUT': 5,
'OPTIONS': {
'use_ssl': True,
'verify_certs': False,
},
'INDEX_SETTINGS': {},
}
}
因为是https嘛,所以就加了OPTIONS配置忽略证书,这点道理还是懂得。
不出意外的话这个时候就该出现意外了,
elasticsearch.exceptions.SSLError: ConnectionError([SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)) caused by: SSLError([SSL: CERTIFICATE_VERIFY_FAILED] certific ate verify failed: self signed certificate in certificate chain (_ssl.c:1129))
真是踩屎的感觉,都设置False了还检测证书,查会文档啥的感觉没错,然后又添加证书, 三选一
# provide a path to CA certs on disk
ca_certs='/path/to/CA_certs',
# PEM formatted SSL client certificate
client_cert='/path/to/clientcert.pem',
# PEM formatted SSL client key
client_key='/path/to/clientkey.pem'
毫无意外,又踩了一下,死活找不到路径。。。
运维说最好忽略证书,那就放弃吧,继续面向google开发
一顿搜索,试了几个不管用,也大致了解了为啥'verify_certs': False
不生效, 好像是这个设置Flase,证书路径就是None,然后在某一步将None读取成了字符串
最后找了个能用的方法记录下来
import ssl
from elasticsearch.connection import create_ssl_context
ssl_context = create_ssl_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
WAGTAILSEARCH_BACKENDS = {
'default': {
'BACKEND': 'wagtail.search.backends.elasticsearch7',
'URLS': ['https://user-name:pwd@10.xx.xx.104:9200'],
'INDEX': 'wagtail_search',
'TIMEOUT': 5,
'OPTIONS': {
'ssl_context': ssl_context,
'use_ssl': True,
'verify_certs': False,
},
'INDEX_SETTINGS': {},
}
}