我正在使用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 - 我真的迷路了,似乎错过了一步某处?
感谢您的帮助!
答案 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