URI :: InvalidURIError:方案http不接受注册表部分:: 9200(或错误的主机名?)

时间:2014-11-28 04:07:35

标签: ruby-on-rails searchkick bonsai-elasticsearch

我正在使用Elasticsearch / SearchKick / Bonsai在Heroku上的生产中设置搜索。这在本地工作得很漂亮,但是我无法在Heroku上索引我的对象。

在config / initializers / bonsai.rb

require 'elasticsearch/model'

if ENV['BONSAI_URL']
  Elasticsearch::Model.client = Elasticsearch::Client.new({url: ENV['BONSAI_URL'], logs: true})
end

在lib / tasks / elasticsearch.rb

require 'elasticsearch/rails/tasks/import'

在user.rb

  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks
  searchkick

  def search_data
    attributes.merge(
      profile_name: profile.name(&:name),
      book_title: books.map(&:title)
    )
  end

的Gemfile

    gem 'bonsai-elasticsearch-rails' #in the production group
gem 'elasticsearch-model'
gem 'elasticsearch-rails'
gem "searchkick"

我跑了:heroku配置:添加BONSAI_URL = mybonsaiurl

但是,当我尝试重新索引:heroku run rake searchkick:reindex CLASS = User 我得到:URI :: InvalidURIError:方案http不接受注册表部分:: 9200(或错误的主机名?)

或者当我这样做时:用户。 elasticsearch .create_index! force:true 我明白了:用户。 elasticsearch .create_index!:找不到命令

似乎SearchKick或其他东西默认设置为9200,但我不知道如何更改它或是否应该查找我的应用程序URL或盆景URL - 我真的迷路了,似乎错过了一步某处?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

感谢Heroku支持团队。

我试图使用两个不同的客户端 - 官方Elasticsearch rails客户端和Searchkick。我通过并删除了3个Elasticsearch / Bonsai宝石的所有配置,并编辑了这个文件:

config/initializers/bonsai.rb
if ENV['BONSAI_URL']
# Elasticsearch::Model.client = Elasticsearch::Client.new({url: ENV['BONSAI_URL'], logs: true})
Searchkick.client = Elasticsearch::Client.new({url: ENV[‘BONSAI_URL’], logs: true})
end

现在,我可以运行:heroku运行rake searchkick:reindex:all 索引我的模型。

更多信息:http://danifankhauser.com/post/104137889438/rails-how-to-index-searchkick-on-heroku-with