Elasticsearch本地运行正常,执行测试时9200端口连接错误如何解决?
解决方案
- 优先核对多环境Chewy配置
绝大多数这类问题是因为config/chewy.yml仅配置了开发环境的Elasticsearch地址,测试环境无对应配置,默认走localhost:9200触发连接失败。你可以在配置文件中补充测试环境配置:test: # 本地直接安装ES用127.0.0.1:9200,避免localhost解析到IPv6导致连接失败 # Docker-compose部署的话填ES服务的容器名,比如elasticsearch:9200 host: '127.0.0.1:9200' - 对齐Docker网络(Docker部署ES场景适用)
开发环境运行时你的Rails服务和ES容器在同一个Docker网络下可正常通信,如果执行测试时单独启动了Rails容器,没有加入ES所在的网络就会无法连接。直接用docker-compose执行测试即可:
其中docker-compose run --rm web bundle exec rspec 你的测试文件路径web为你的Rails服务在docker-compose.yml中定义的服务名。 - 测试环境关闭真实ES连接(可选)
如果你不需要在测试中调用真实ES服务,可以开启Chewy的测试适配器,用内存模拟ES操作,既不会触发连接报错,还能大幅提升测试速度。在spec/rails_helper.rb中添加配置:Chewy.settings = { adapter: :test } - 排查地址解析问题
部分系统会将localhost默认解析为IPv6地址::1,如果你的ES仅监听IPv4的127.0.0.1就会连接失败,直接把配置中的localhost替换为127.0.0.1即可解决。
内容的提问来源于stack exchange,提问作者Shamila
相关产品推荐
相关产品推荐

