我正在使用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。
答案 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)
答案 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后,事情已经开始运作良好。