gpt4 book ai didi

ruby-on-rails - Searchkick 异步更新

转载 作者:行者123 更新时间:2023-12-05 07:37:12 28 4
gpt4 key购买 nike

我开始使用 searchkick 连接 elasticsearch,但在后台作业中遇到索引更新问题。我在文档中都是通过示例完成的,但是sidekiq中的searchkick任务仅在重新启动sidekiq后才累积和执行,并且执行后任务再次收集而不执行。下面的代码。

这是我的 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

而且,我还向 sidekiq.yml 添加了 searchkick 队列。如何在不重启 sidekiq 的情况下始终执行 searchkick 作业?提前致谢?

最佳答案

尝试在 Searchkick Git Readme 上列出的这些步骤---

假设您有 Redis 来存储您的作业。

将此添加到模型以指示 Searchkick 需要在后台异步重新索引。

searchkick callbacks: :queue

然后在您的 sidekiq.yml 中,设置队列优先级,如下所示,让 sidekiq 确定作业的优先级 -

###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 开始

这应该适合你。

关于ruby-on-rails - Searchkick 异步更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48783201/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com