使用 ElasticSearch 的 Searchkick returns "Faraday::ConnectionFailed: execution expired"

Searchkick with ElasticSearch returns "Faraday::ConnectionFailed: execution expired"

我一直在使用 searchkick gem 和 elasticsearch,在 Rails 4.2.0 应用程序上没有任何问题。我有一个使用 searchkick 的视频模型。

出于某种原因 rake searchkick:reindex:all 现在一直失败:

Reindexing Video... rake aborted! Faraday::ConnectionFailed: execution expired

我最初是通过 brew install elasticsearch 安装 elasticsearch 的,returns:

Warning: elasticsearch-1.3.4 already installed

我的 elasticsearch installation/database 是否可能已损坏?如果是这样,刷新它的最佳方法是什么?

根据 https://www.elastic.co/guide/en/elasticsearch/reference/1.4/indices-delete-index.html 我尝试了 curl -XDELETE 'http://localhost:9200/_all' 但这并没有解决错误。

当我将此代码部署到 AWS 时,我的 Mac 和 Elastic Beanstalk 都出现了这个问题(两者之前都正常工作)。

通常经过几个小时的努力,我在发布问题后几分钟就找到了答案...

根据https://github.com/ankane/searchkick/issues/382,我添加了一个初始值设定项:

Searchkick.client = Elasticsearch::Client.new(hosts: ["localhost:9200"], retry_on_failure: true, transport_options: {request: {timeout: 250}})

这似乎解决了问题。如果它再次发生,我会报告。

在config/initializers/elasticsearch.rb

中添加以下代码行

Searchkick.client = Elasticsearch::Client.new(hosts: ["localhost:9200"], retry_on_failure: true, transport_options: {request: {timeout: 250}})

可以根据Rails环境指定。

对我来说,问题出在 URL 中缺少端口。 (我在本地主机上使用 AWS elasticsearch 而不是 运行。)

我变了

ENV['ELASTICSEARCH_URL'] = Rails.application.credentials.dig(:elasticsearch, :url)

ENV['ELASTICSEARCH_URL'] = Rails.application.credentials.dig(:elasticsearch, :url) + ':443'

这不会影响我的所有项目,所以我猜这与较新的版本有关。