Sidekiq工人没有被触发

时间:2012-10-10 09:34:47

标签: ruby-on-rails ruby nginx passenger sidekiq

我正在使用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。

9 个答案:

答案 0 :(得分:29)

Sidekiq正在运行时遇到类似的问题,但是当我拨打perform_async时,除了返回true之外,它没有做任何事情。

问题是 rspec-sidekiq 被添加到我的" :development,:test "组。我通过将 rspec-sidekiq 移动到" :test "来解决问题。只有小组。

答案 1 :(得分:7)

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

  

捆绑exec sidekiq -e staging -C config / sidekiq.yml

答案 2 :(得分:1)

我遇到同样的问题,事实证明我在函数perform_async中传递的参数不合适,似乎一个不应该在perform_async中传递任何查询结果,你必须在函数执行中执行所有查询

答案 3 :(得分:1)

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

实施例: sidekiq_options retry:false,:queue => data_import_worker

data_import_worker可以是您想要的任何名称。

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

答案 4 :(得分:1)

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

---
:concurrency: 25
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
  - default
  - my_queue

答案 5 :(得分:1)

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

在我们的案例中,我们拼写错误mailer(Mailers的正确ActiveJob队列为mailers,复数形式)。

答案 6 :(得分:0)

我的问题只是让工作文件处于错误的路径。

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

检查文件路径!

答案 7 :(得分:0)

是否真的在独立的sidekiq上运行多个工作人员? 例如,我有2名工人: ProccessWorker CallbackWorker

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

同时只有一名工人。

答案 8 :(得分:0)

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

在我开始生产模式的Sidekiq后,事情已经开始运作良好。