Elasticsearch: неопределенный метод `params_encoder 'для {" timeout "=> 300,: proxy => nil}: хеш - PullRequest
0 голосов
/ 01 февраля 2019

Я установил 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 проекте.

Gemfile

  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 /asticsearch.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 /asticsearch.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

Выдает ошибку:

неопределенный метод `params_encoder 'для {" timeout "=> 300,: proxy => nil}: Hash

Я не понимаю эту ошибку.

1 Ответ

0 голосов
/ 04 марта 2019

Кажется, что 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
...