我很高兴在Rails应用程序中使用Elasticsearch并使用耐嚼的gem来实现它。当我通过rails s
在开发模式下运行rails应用程序时,然后通过elasticsearch
命令运行Elasticsearch并运行rake chewy:reset:all
为我的数据创建索引。
一切正常,但如果我重新启动服务器,我必须再次运行rake chewy:reset:all
命令来重建索引,否则我会收到错误。重启服务器时索引会发生什么?它是在服务器停止时销毁的吗?
我对Elasticsearch的功能并不是很熟悉,所以我很欣赏任何人对幕后发生的事情有所了解。
答案 0 :(得分:0)
我从来没有使用过Chewy,但是如果你在config / initializers / chewy.rb中加上“Chewy.settings = {prefix:'test'}”来判断它们的文档,那么它将在'test'前面加上所有内容,同样在开发中。当然,我不知道你是否把它放在了哪里。
另请注意,黄瓜倾向于在开发模式(https://github.com/cucumber/cucumber-rails/issues/222)中运行测试。
因此,请尝试从您的代码中删除“Chewy.settings = {prefix:'test'}”,然后在您的chewy.yml文件中添加以下内容:
# config/chewy.yml
cucumber:
host: 'localhost:9200'
prefix: 'test'
然后将其添加到您的黄瓜env.rb文件中:
ENV["RAILS_ENV"] ||= 'cucumber'
尝试用耙黄瓜再次运行黄瓜
答案 1 :(得分:0)
当您在终端中运行elasticsearch
时,请将其视为单独的服务器,就像您的rails s
一样。它完全独立于您的应用程序服务器。作为一名耐心的用户,我认为你正在处理受污染的索引。以下是解决问题的方法:
在向数据库添加/删除记录时,检查是否正在更新索引。如果Chewy的索引文档在您的数据库中没有匹配的记录,则可能会出现一些意外错误。根据{{3}}:
在测试套件中设置旁路策略并仅在需要时手动导入对象也是一个好主意,并在需要时使用Chewy.massacre在每个示例之前刷新测试ES索引。这将允许您最小化不必要的ES请求并减少开销。
RSpec.configure do |config|
config.before(:suite) do
Chewy.strategy(:bypass) # if you're not using RSpec, copy this line and paste it in the setup script of your suite.
end
end