Sidekiq工作进程未被触发

21

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

当我从我的操作中触发它时,worker 没有被调用。Redis 运行在 localhost:6379 上。

您有任何想法为什么会出现这种情况。环境是 Linux。


Sidekiq正在运行吗?日志上显示了什么?你检查过Redis了吗?任务是否已添加到队列:default? - Roman
@Roman:谢谢回复!是的,sidekiq和redis都在运行...工作也没有被添加到默认队列...但是当我从控制台触发作业时,它可以正常工作。 - AnkitG
也许在开发和生产环境下,你会使用不同的数据库或命名空间。或者可能会设置不同的队列。 - Roman
@Roman:不太明白你的意思,请详细说明一下? - AnkitG
我指的是这个:https://github.com/mperham/sidekiq/wiki/Advanced-Options - Roman
9个回答

34

我有一个类似的问题,其中Sidekiq正在运行,但当我调用perform_async时,除了返回true之外,它什么都没做。

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


1
这在我的情况下是类似的问题。 - AnkitG
1
我也遇到了完全相同的问题。我也不得不重建我的bundle:bundle install --without test - keaplogik
3
为了以后参考,我在 https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#the-workers-are-not-starting 的答案中添加了一个链接。 - lkartono
2
感谢您提供答案,我差点就要把我的机器扔出窗外了。 - westonplatter
请参见 https://github.com/philostler/rspec-sidekiq,了解此潜在问题的详细信息。 - eebbesen

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

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

其中,"-e" 表示环境名称,"-C" 指定了配置文件的位置。

2

我遇到了同样的问题,原来是我在 perform_async 函数中传递的参数不合适,似乎不能在 perform_async 中传递任何查询结果,在 perform 函数中必须执行所有查询。


1

您需要指定工作程序所属的队列名称。

例如: sidekiq_options retry: false, :queue => data_import_worker

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

然后,当您访问 Web 界面:yoursite.com/sidekiq 时,您将能够查看队列 "data_import_worker" 的当前工作程序。


1

我在这上面浪费了15分钟。要检查Sidekiq是否正确加载您的配置文件(包括队列名称),请转到繁忙标签中的Web界面,您会找到您的进程ID,下面是您的队列。

在我们的情况下,我们拼错了mailer(Mailers的正确ActiveJob队列为复数形式的mailers)。


1
当我使用perform_later时,它会加入队列但从未被移除。我需要将我的队列名称添加到sidekiq.yml文件中。
---
:concurrency: 25
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
  - default
  - my_queue

0

在独立的Sidekiq上运行多个工作进程是真的吗? 例如,我有2个工作进程: ProccessWorker CallbackWorker

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

同一时间只有一个工作进程在运行。


0
我在生产环境的控制台中调用了perform_async(23),但我的 Sidekiq 是在测试模式下启动的。
在我将 Sidekiq 切换到生产模式后,一切都开始正常工作了。

0

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

应该放在“项目根目录/ app / worker / worker.rb”中,而不是“项目根目录 / worker / worker.rb”

检查文件路径!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接