/ / Connection Refused Error Próba importowania modelu ElasticSearch poprzez Rake on Heroku - ruby-on-rails, heroku, elasticsearch, tire, bonsai-elasticsearch

Połączenie odrzucono błąd Próba importowania modelu ElasticSearch poprzez Rake on Heroku - ruby-on-rails, heroku, elasticsearch, tire, bonsai-elasticsearch

Z jakiegoś powodu na Heroku nie pozwala mido importowania modeli (jest to dodatek do Bonsai ElasticSearch). Po prostu pokazuje odmowę połączenia. Nie jestem pewien, jak rozwiązać ten problem. Przeszukałem Internet i nie mogę znaleźć niczego, co by mi podpowiedziało w odpowiednim kierunku, aby rozwiązać ten problem. Sprawdziłem, aby upewnić się, że serwer jest uruchomiony i ręcznie utworzyłem indeks z curl. Czy inicjalizatory są uruchamiane podczas uruchamiania zadania rake?

Ustawiłem adres URL elasticsearch w pliku config / initializers / bonsai.rb:

config / initializers / bonsai.rb

if Rails.env == "production"
ENV["ELASTICSEARCH_URL"] = ENV["BONSAI_URL"]
end

Fragment Gemfile

# Used for elastic search
gem "elasticsearch-model", github: "elasticsearch/elasticsearch-rails"
gem "elasticsearch-rails", github: "elasticsearch/elasticsearch-rails"
gem "multi_json"
gem "json"

Błąd

heroku run rake environment elasticsearch:import:all DIR=app/models
Running `rake environment elasticsearch:import:all DIR=app/models` attached to terminal... up, run.5751
[IMPORT] Loading models from: app/models
[IMPORT] Processing model: Firm...
rake aborted!
Connection refused - connect(2)
/app/vendor/bundle/ruby/2.0.0/gems/faraday-0.9.0/lib/faraday/adapter/net_http.rb:80:in `perform_request"
/app/vendor/bundle/ruby/2.0.0/gems/faraday-0.9.0/lib/faraday/adapter/net_http.rb:39:in `call"
/app/vendor/bundle/ruby/2.0.0/gems/faraday-0.9.0/lib/faraday/rack_builder.rb:139:in `build_response"
/app/vendor/bundle/ruby/2.0.0/gems/faraday-0.9.0/lib/faraday/connection.rb:377:in `run_request"
/app/vendor/bundle/ruby/2.0.0/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/transport/http/faraday.rb:21:in `block in perform_request"
/app/vendor/bundle/ruby/2.0.0/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/transport/base.rb:187:in `call"
/app/vendor/bundle/ruby/2.0.0/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/transport/base.rb:187:in `perform_request"
/app/vendor/bundle/ruby/2.0.0/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/transport/http/faraday.rb:20:in `perform_request"
/app/vendor/bundle/ruby/2.0.0/gems/elasticsearch-transport-1.0.1/lib/elasticsearch/transport/client.rb:102:in `perform_request"
/app/vendor/bundle/ruby/2.0.0/gems/elasticsearch-api-1.0.1/lib/elasticsearch/api/actions/bulk.rb:81:in `bulk"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-model/lib/elasticsearch/model/importing.rb:78:in `block in import"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-model/lib/elasticsearch/model/adapters/active_record.rb:88:in `block in __find_in_batches"
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.1.0/lib/active_record/relation/batches.rb:125:in `find_in_batches"
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.1.0/lib/active_record/querying.rb:9:in `find_in_batches"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-model/lib/elasticsearch/model/proxy.rb:80:in `method_missing"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-model/lib/elasticsearch/model/adapters/active_record.rb:86:in `__find_in_batches"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-model/lib/elasticsearch/model/importing.rb:77:in `import"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-model/lib/elasticsearch/model.rb:113:in `import"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-rails/lib/elasticsearch/rails/tasks/import.rb:59:in `block (3 levels) in <top (required)>"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-rails/lib/elasticsearch/rails/tasks/import.rb:99:in `block (4 levels) in <top (required)>"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-rails/lib/elasticsearch/rails/tasks/import.rb:82:in `each"
/app/vendor/bundle/ruby/2.0.0/bundler/gems/elasticsearch-rails-26a3ba246968/elasticsearch-rails/lib/elasticsearch/rails/tasks/import.rb:82:in `block (3 levels) in <top (required)>"
Tasks: TOP => elasticsearch:import:model
(See full trace by running task with --trace)

nawiasem mówiąc, ktoś może stworzyć tag "elasticsearch-rails" od czasu zbliżającego się zastąpienia Tire

Odpowiedzi:

0 dla odpowiedzi № 1

Elasticsearch Rails nie używa tego samegomechanizm jako Tyre, aby ustawić swój URL w produkcji na Heroku. Aby działało poprawnie z wyszukiwaniem Bonsai, musisz mieć inną specyfikację adresu URL. Na szczęście facet zrobił klejnot (https://rubygems.org/gems/bonsai-elasticsearch-rails), aby wyeliminować niepotrzebne, obowiązkowe tworzenie inicjatora przez wszystkich.

Po prostu dodaj ten klejnot do pliku gem w swojej grupie produkcyjnej. Wersja może ulec zmianie, ponieważ jest tak nowa:

gem "bonsai-elasticsearch-rails", "~> 0.0.4"

Jeśli jesteś bardziej ciekawy co ten klejnot faktycznie robi, całe źródło jest poniżej:

require "bonsai/elasticsearch/rails/version"

puts "Starting up a new ElasticSearch client with #{ENV["BONSAI_URL"]}"
Elasticsearch::Model.client = Elasticsearch::Client.new url: ENV["BONSAI_URL"]

Wiem, proste, prawda ...