【问题标题】:Searchkick async updatingSearchkick 异步更新
【发布时间】:2018-07-24 18:58:53
【问题描述】:

我开始使用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

另外,我将searchkick 队列添加到sidekiq.yml。 如何在不重新启动 sidekiq 的情况下始终执行 searchkick 作业? 提前致谢?

【问题讨论】:

    标签: ruby-on-rails ruby elasticsearch searchkick


    【解决方案1】:

    尝试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 start

    这应该适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多