Sidekiq排队工作,而不是让他们离开

时间:2014-09-04 13:56:57

标签: ruby ruby-on-rails-4 redis sidekiq

出于某种原因,Sidekiq并没有为我开展任何工作。它可以很好地排列它们,但它永远不会将它们排除在队列之外。

我已确认redis正在运行:

ps aux | grep redis
root      2756  0.0  0.0 140612  2656 ?        Sl   Sep03   0:36 redis-server *:6379
root      7489  0.0  0.0 110284   840 pts/0    S+   09:19   0:00 grep redis

我确认Sidekiq正在运行:

ps aux | grep sidekiq
root      6732  0.1  1.9 2527436 148000 ?      Sl   09:04   0:03 sidekiq 3.2.1 CompleteSet-Rails [0 of 25 busy]                                                                                              
root      7901  0.0  0.0 110280   840 pts/0    S+   09:44   0:00 grep sidekiq

我使用:

启动了Sidekiq
bundle exec sidekiq -d -e production -L log/sidekiq.log

我已经确认它正在向队列中添加作业:

Sidekiq.redis { |r| r.lrange "queue:default", 0, -1 }.length
=> 70 
UserMailer.delay.reset_password(User.third)
=> "9fc420a5b21224e5b264b9e9" 
Sidekiq.redis { |r| r.lrange "queue:default", 0, -1 }.length
=> 71

我没有使用自定义工作类,而且我没有尝试使用自定义.yml或.rb配置文件。有什么想法,为什么它没有执行工作?

编辑:

我注意到选项没有返回任何队列。这可能与它有关吗?

Sidekiq.options
=> {:queues=>[], :labels=>[], :concurrency=>25, :require=>".", :environment=>nil, :timeout=>8, :error_handlers=>[], :lifecycle_events=>{:startup=>[], :quiet=>[], :shutdown=>[]}}

1 个答案:

答案 0 :(得分:1)

我没有明确地将它设置为检查log / sidekiq.yml或config / initializers / sidekiq.rb,但无论如何它都在检查它们。在初始化程序文件中,我将其设置为仅从名为production的队列中读取,但因为我使用Mailer.delay.whatever,所以它正在写入默认队列,即使我已将其配置为仅使用生产。如果要更改要写入的队列,请使用自定义工作线程,或使用Mailer.delay(queue: name)将其置于所需的队列中。