我开始使用searchkick来连接elasticsearch,并且在后台作业中遇到了索引更新问题。我在文档中做了所有的例子,但是搜索任务只能在重新启动回齐后才会累积和执行,而在执行之后,任务会在没有执行的情况下再次收集。下面是代码。
这里是我的searchkick.rb初始化器
Searchkick.client =
Elasticsearch::Client.new(
url: 'remote_ip:9200',
retry_on_failure: true,
transport_options: { request: { timeout: 250 } }
)
Searchkick.redis = ConnectionPool.new { Redis.new }我的模型的一部分
after_commit :searchkick_indexing
searchkick callbacks: :queue, index_name: :my_index_name
def search_data
{
title: title,
description: description
}
end
private
def searchkick_indexing
Searchkick::ProcessQueueJob.perform_later(class_name: "model_name")
end此外,我还将searchkick队列添加到sidekiq.yml中。如何总是在不重新启动的情况下执行搜索任务?提前感谢?
发布于 2021-12-16 17:27:08
试试Searchkick自述上列出的这些步骤--
假设你有Redis来存储你的工作。
将其添加到模型中,以指示Searchkick需要在后台异步地进行重新索引。
searchkick callbacks: :queue然后在您的sidekiq.yml中,设置队列优先级,如下所示,用于对作业进行排序-
###sample sidekiq.yml file
:concurrency: 5
:queues:
- [searchkick, 2]
- [mailers, 1]
- [carrierwave, 1]
- [default, 2]
staging:
:concurrency: 10
production:
:concurrency: 20
:logfile: ./log/sidekiq.log用bundle exec sidekiq -C config/sidekiq.yml重新启动sidekiq
或为领班安装Procfile以启动多个进程,如-
#sample Procfile
web: bundle exec rails server
sidekiq: bundle exec sidekiq -C config/sidekiq.yml
webpack: ./bin/webpack-dev-server有了工头,你可以用一种方式运行所有这些命令,比如-
bundle exec foreman start
这应该对你有用。
https://stackoverflow.com/questions/48783201
复制相似问题