使用 ElasticSearch 的 Searchkick 返回“Faraday::ConnectionFailed: execution expired”
Posted
技术标签:
【中文标题】使用 ElasticSearch 的 Searchkick 返回“Faraday::ConnectionFailed: execution expired”【英文标题】:Searchkick with ElasticSearch returns "Faraday::ConnectionFailed: execution expired" 【发布时间】:2016-02-07 13:09:55 【问题描述】:我一直在使用带有 elasticsearch 的 searchkick gem,在 Rails 4.2.0 应用程序上没有问题。我有一个使用 searchkick 的视频模型。
由于某种原因,rake searchkick:reindex:all
现在一直在失败:
重新索引视频... rake 中止! Faraday::ConnectionFailed: 执行 过期了
我最初通过brew install elasticsearch
安装elasticsearch,返回:
警告:elasticsearch-1.3.4 已经安装
我的 elasticsearch 安装/数据库是否可能已损坏?如果是这样,刷新它的最佳方法是什么?
按照https://www.elastic.co/guide/en/elasticsearch/reference/1.4/indices-delete-index.html,我尝试了curl -XDELETE 'http://localhost:9200/_all'
,但这并不能解决错误。
当我将此代码部署到 AWS 时,我的 Mac 和 Elastic Beanstalk 上都会出现此问题(之前两者都正常工作)。
【问题讨论】:
【参考方案1】:通常经过数小时的努力,我在发布问题几分钟后找到了答案...
根据https://github.com/ankane/searchkick/issues/382,我添加了一个初始化器:
Searchkick.client = Elasticsearch::Client.new(hosts: ["localhost:9200"], retry_on_failure: true, transport_options: request: timeout: 250)
这似乎解决了这个问题。如果再次发生,我会报告。
【讨论】:
【参考方案2】:在 config/initializers/elasticsearch.rb 中添加以下代码行
Searchkick.client = Elasticsearch::Client.new(hosts: ["localhost:9200"], retry_on_failure: true, transport_options: request: timeout: 250)
可以根据 Rails 环境指定。
【讨论】:
谢谢 - 但我认为这基本上就是我在 2015 年发布的内容?【参考方案3】:对我来说,问题在于 URL 中缺少端口。 (我使用的是 AWS elasticsearch,而不是在本地主机上运行它。)
我变了
ENV['ELASTICSEARCH_URL'] = Rails.application.credentials.dig(:elasticsearch, :url)
到
ENV['ELASTICSEARCH_URL'] = Rails.application.credentials.dig(:elasticsearch, :url) + ':443'
这不会影响我所有的项目,所以我猜这与更新的版本有关。
【讨论】:
以上是关于使用 ElasticSearch 的 Searchkick 返回“Faraday::ConnectionFailed: execution expired”的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch中URI Search和RequestBody Search分析