【问题标题】:Elasticsearch: undefined method `params_encoder' for {"timeout"=>300, :proxy=>nil}:HashElasticsearch:{“timeout”=>300,:proxy=>nil}:Hash的未定义方法`params_encoder'
【发布时间】:2019-02-01 17:06:21
【问题描述】:

我已经在 docker 中安装了 Elasticsearch。 我得到了这样的弹性搜索响应-

curl -XGET http://localhost:9200
{
    "name" : "NXgYHOl",
    "cluster_name" : "docker-cluster",
    "cluster_uuid" : "_na_",
    "version" : {
        "number" : "6.6.0",
        "build_flavor" : "default",
        "build_type" : "tar",
        "build_hash" : "a9861f4",
        "build_date" : "2019-01-24T11:27:09.439740Z",
        "build_snapshot" : false,
        "lucene_version" : "7.6.0",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
    },
    "tagline" : "You Know, for Search"
}

然后我在 rails 项目中配置它。

宝石文件

  gem 'elasticsearch-model'
  gem 'elasticsearch-rails'

应用程序/模型

require 'elasticsearch/model'

class Movie < ApplicationRecord
    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks
end
Movie.import(force: true)

config/initilizers/elasticsearch.rb

config = {
    host: "http://localhost:9200",
    transport_options: {
      request: { timeout: 5 }
    }
}

if File.exists?("config/elasticsearch.yml")
    config.merge!(YAML.load_file("config/elasticsearch.yml")[Rails.env].symbolize_keys)
end

Elasticsearch::Model.client = Elasticsearch::Client.new(config)

config/elasticsearch.yml

development: &default
    host: 'http://localhost:9200'
    transport_options:
      request:
        timeout: !!integer 300
test:
    <<: *default
production:
    host: 'http://localhost:9200'
  transport_options:
    request:
        timeout: !!integer 300

它给出了一个错误:

{"timeout"=>300, :proxy=>nil}:Hash 的未定义方法 `params_encoder'

我不明白这个错误。

【问题讨论】:

    标签: ruby-on-rails elasticsearch docker-compose


    【解决方案1】:

    根据 ruby​​ gem 的official docs,似乎transport_options 不是一个选项。

    它确实提到了一个request_timeout 选项,它应该可以工作。 因此,将您的 config/elasticsearch.yml 文件更改为以下内容:

    development: &default
        host: 'http://localhost:9200'
        request_timeout: !!integer 300
    test:
        <<: *default
    production:
        host: 'http://localhost:9200'
        request_timeout: !!integer 300
    

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2019-04-15
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多