【问题标题】:Searchkick with ElasticSearch returns "Faraday::ConnectionFailed: execution expired"使用 ElasticSearch 的 Searchkick 返回“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 上都会出现此问题(之前两者都正常工作)。

【问题讨论】:

    标签: ruby-on-rails elasticsearch searchkick


    【解决方案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'
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 2020-03-29
        • 2023-03-28
        • 2019-10-24
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        相关资源
        最近更新 更多