2

我正在使用 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'

在用户.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

宝石文件

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

我跑了:heroku config:add BONSAI_URL=mybonsaiurl

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

或者当我这样做时:用户。弹性搜索.create_index!力:真我得到:用户。elasticsearch .create_index !:找不到命令

似乎 SearchKick 或默认设置为 9200,但我不确定如何更改它,或者它是否应该查找我的应用程序 URL 或盆景 URL——我真的迷路了,似乎在某个地方错过了一步?

谢谢你的帮助!

4

1 回答 1

3

感谢 Heroku 支持团队解决。

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

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 run rake searchkick:reindex:all 来索引我的模型。

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

于 2014-12-02T14:35:21.940 回答