我一直在使用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都会出现此问题(两者以前都正常工作)。
答案 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'
这不会影响我的所有项目,所以我猜这与更新版本有关。