2012-10-10 35 views
16

我使用Sidekiq我的后台作业:Sidekiq工人没有得到触发

我有一个工人的应用程序/工人/ 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 

只要我从我的行动中触发它的工作r没有被调用.. Redis正在运行localhost:6379

任何想法为什么这一定会发生。环境是Linux。

+0

sidekiq运行?它在日志中说什么?你检查过redis吗,是否加入队列:default? – Roman

+0

@罗曼:感谢您的回复!是的,sidekiq和redis都在运行..作业也没有被添加到默认队列中......但是当我从控制台触发作业时,它的工作原理 – AnkitG

+0

也许在开发和生产环境中运行时有不同的数据库或名称空间。或者设置不同的队列。 – Roman

回答

28

我也有类似的问题,即Sidekiq正在运行,但是当我打电话给perform_async,除了返回true,它什么也没做。

问题是rspec的-sidekiq添加到我的 “:发展:测试” 组。我通过将rspec-sidekiq仅限于“:测试”组来修复此问题。

+1

这是类似的问题在我的案件 – AnkitG

+1

我有同样的确切问题。我不得不重建我的软件包:'bundle install --without test' – keaplogik

+3

我在https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#the-workers-不是开始为将来的参考 – lkartono

1

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

2

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

例子: sidekiq_options重试:假的,:队列=> data_import_worker

data_import_worker可以成为你想给它的任何名称。

然后,当你去到Web界面:yoursite.com/sidekiq,你就可以看到当前的工人队列“data_import_worker”

0

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

需要在 “project_root /应用/工人/ worker.rb”,而不是 “project_root /工人/ worker.rb”

检查文件的路径!

+2

/app/workers surely(复数) – mahemoff

6

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

束EXEC sidekiq -e分期-C配置/ sidekiq.yml

0

是它真的在独立sidekiq运行多个工作者? 比如我有2名工人: ProccessWorker CallbackWorker

当我runnigs sidekiq

: 束EXEC sidekiq -r ./workers/proccess_worker.rb -C ./config/sidekiq。yml

同一时间只有一名工人。

1

对于我来说,当执行一个perform_later时,它会入队,但不会从队列中移除。我需要我的队列名称添加到sidekiq.yml文件

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

我打电话在生产控制台perform_async(23),但是我sidekiq在临时模式启动。

在我开始生产模式下的Sidekiq后,事情已经开始奏效。

1

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

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