使用ElasticSearch的Searchkick返回" Faraday :: ConnectionFailed:执行过期"

时间:2015-11-06 11:35:51

标签: ruby-on-rails elasticsearch searchkick

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

出于某种原因,rake searchkick:reindex:all现在与以下内容一致失败:

  

重新索引视频...佣金已中止!法拉第:: ConnectionFailed:执行   过期

我最初通过brew install 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都会出现此问题(两者以前都正常工作)。

3 个答案:

答案 0 :(得分:7)

通常经过几个小时的挣扎后,我在发布问题后找到了答案......

根据https://github.com/ankane/searchkick/issues/382我添加了一个初始化程序:

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

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

答案 1 :(得分:0)

在config / initializers / elasticsearch.rb

中添加以下代码行

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

您可以根据Rails环境指定。

答案 2 :(得分:0)

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

我变了

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

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

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