出于某种原因,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
我使用:
启动了Sidekiqbundle 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=>[]}}
答案 0 :(得分:1)
我没有明确地将它设置为检查log / sidekiq.yml或config / initializers / sidekiq.rb,但无论如何它都在检查它们。在初始化程序文件中,我将其设置为仅从名为production的队列中读取,但因为我使用Mailer.delay.whatever
,所以它正在写入默认队列,即使我已将其配置为仅使用生产。如果要更改要写入的队列,请使用自定义工作线程,或使用Mailer.delay(queue: name)
将其置于所需的队列中。