20

我将Sidekiq用于我的后台工作:

我有一个工人 app/workers/data_import_worker.rb

class DataImportWorker
 include Sidekiq::Worker
 sidekiq_options retry: false

  def perform(job_id,file_name)
    begin
    #Some logic in it .....
  end
 end

从文件 lib/parse_excel.rb 调用

  def parse_raw_data
      #job_id and #filename are defined bfr
      DataImportWorker.perform_async(job_id,filename)   
  end

一旦我从我的操作中触发它,工作人员就不会被调用.. Redis 正在运行localhost:6379

知道为什么这一定会发生。环境是Linux。

4

9 回答 9

33

我在 Sidekiq 运行时遇到了类似的问题,但是当我调用perform_async它时,它除了 return 之外什么也没做true

问题是rspec-sidekiq被添加到我的“ :development, :test ”组中。我通过将rspec-sidekiq移动到“ :test ”组来解决了这个问题。

于 2013-06-12T12:38:46.523 回答
8

从 Rails 应用程序的根目录启动 sidekiq。例如,

bundle exec sidekiq -e staging -C config/sidekiq.yml

于 2014-03-11T12:43:40.553 回答
2

我也遇到了同样的问题,原来我在perform_async函数中传入的参数不合适,看来不应该在perform_async中传入任何查询结果,必须在函数perform中执行所有查询。

于 2013-01-10T08:48:23.003 回答
1

您需要指定工作人员所在的队列的名称。

示例:sidekiq_options 重试:false, :queue => data_import_worker

data_import_worker 可以是你想给它的任何名字。

然后,当您进入 Web 界面:yoursite.com/sidekiq,您将能够看到队列“data_import_worker”的当前工作人员

于 2013-01-12T02:05:25.870 回答
1

对我来说,在执行 perform_later 时,它会排队但永远不会从队列中删除。我需要将我的队列名称添加到 sidekiq.yml 文件

---
:concurrency: 25
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
  - default
  - my_queue
于 2016-11-11T23:12:49.620 回答
1

在这方面损失了 15 分钟。要检查 Sidekiq 是否正确加载了您的配置文件(带有队列名称),请转到“忙碌”选项卡中的 Web 界面,您将找到您的进程 ID,在它下方您会找到您的队列。

在我们的例子中,我们拼错mailer了(Mailers 的正确 ActiveJob 队列是mailers复数形式)。

于 2017-08-08T19:50:59.530 回答
0

我的问题只是将工作文件放在错误的路径中。

需要在“project_root/app/worker/worker.rb”中,而不是“project_root/worker/worker.rb”

检查文件路径!

于 2013-11-19T14:13:17.993 回答
0

它真的在独立的 sidekiq 上运行多个工作人员吗?例如我有 2 个工人: ProcessWorker CallbackWorker

当我运行sidekiq时: bundle exec sidekiq -r ./workers/proccess_worker.rb -C ./config/sidekiq.yml

同一时间只有一名工人。

于 2014-10-21T12:21:39.563 回答
0

perform_async(23)在生产控制台中调用,但是我的 sidekiq 是在暂存模式下启动的。

在我以生产模式启动 Sidekiq 后,一切都开始运转良好。

于 2017-05-26T19:02:26.020 回答