[英]elasticsearch-rails VS (re)tire gem (Elasticsearch and Rails 3.2)
[英]Ruby On Rails: ElasticSearch authentication (Tire and ElasticSearch-rails)
我在 Heroku 上部署了一个 Ruby On Rails 应用程序,我使用 ElasticSearch 附加组件,我的弹性搜索集群正常工作,但最近 ElasticSearch 附加组件要求所有集群强制执行身份验证以保护托管集群内部的数据,现在,在我们尝试提出的每个请求中,我们都会收到以下异常:
Tire::Search::SearchRequestFailed (401 : {"error":{"root_cause":[{"type":"security_exception","reason":"action [indices:data/read/search] requires authentication","header":{"WWW-Authenticate":"Basic realm=\\"shield\\" charset=\\"UTF-8\\""}}],"type":"security_exception","reason":"action [indices:data/read/search] requires authentication","header":{"WWW-Authenticate":"Basic realm=\\"shield\\" charset=\\"UTF-8\\""}},"status":401}):
我们从 Elasticsearch 附带的Shield插件配置了一些用户,但是我不确定如何从我的 ruby On Rails 应用程序输入此身份验证,我使用 Tyre 将弹性搜索集成到我的 Ruby On Rails 应用程序中,但我找不到我是否可以将这些信息用于验证我的应用程序并解决此问题。
我们想知道如何使用这两个 gem 进行身份验证: ElasticSearch-rails和Tyre
我建议使用elasticsearch-rails而不是轮胎(废弃)。
使用elasticsearch-rails:
宝石文件
gem 'elasticsearch'
gem 'elasticsearch-model'
gem 'elasticsearch-rails'
模型可以搜索吗
将特征提取模式 (可搜索关注点)应用于模型。
配置您的弹性搜索客户端
适用于使用通用URL格式通过auth进行config/initializers/elastic_search_client.rb
的初始化器( config/initializers/elastic_search_client.rb
或其他任何模型)中的所有模型
Elasticsearch::Client.new url: 'https://username:password@api.server.org:4430/search
'
或使用哈希使用auth
Elasticsearch::Client.new hosts: [
{ host: 'my-protected-host',
port: '443',
user: 'USERNAME',
password: 'PASSWORD',
scheme: 'https'
} ]
请查看高级客户端选项以获取更多信息。
注意:我并没有亲自测试它,这是理论,也许是缺少了一些,请查看elasticsearch-rails docs 。
我希望这有帮助。
您可以将ELASTICSEARCH_URL
环境变量设置为https://USER:PASSWORD@some.domain:9200
。
这是有效的,因为由elasticsearch-rails
gem 初始化的客户端实际上是elastic-transport-ruby
gem 的客户端,并且这个 gem 的客户端将使用ELASTICSEARCH_URL
环境变量,定义如下: https : //github.com/elastic /elastic-transport-ruby/blob/1dcb6c9db68dba70958e99d50e35a577d7d7f628/lib/elastic/transport/client.rb#L139-L144
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.