Rails 3.2.9
Ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]
sidekiq 2.10.1
如果我使用自定义队列名称定义如下所示的工作人员
class BulkEmailWorker
include Sidekiq::Worker
# https://github.com/mperham/sidekiq/wiki/Advanced-Options
sidekiq_options(queue: :bulk_mails, backtrace: true)
# https://github.com/mperham/sidekiq/wiki/Best-Practices
# Section: Make your jobs small and simple
def perform
# https://github.com/mperham/sidekiq/wiki/Delayed-Extensions
scheduled_mails = MailTemplate.with_schedule
scheduled_mails.each do |mail_template|
BulkMailer.delay.general_mail(mail_template.id)
end
end
end
我像这样调用工人:
BulkEmailWorker.perform_async
它不起作用(换句话说,不发送电子邮件)。
检查redis中的数据我发现以下内容:
redis 127.0.0.1:6379> keys *
1) "myapp:stat:processed:2013-04-24"
2) "myapp:queue:default"
3) "myapp:stat:processed"
4) "myapp:queues"
redis 127.0.0.1:6379> lrange myapp:queue:default -100 100
1) "{\"retry\":true,\"queue\":\"default\",\"timeout\":30,\"class\":\"Sidekiq::Extensions::DelayedMailer\",\"args\":[\"---\\n- !ruby/class 'BulkMailer'\\n- :general_mail\\n- - 1\\n\"],\"jid\":\"e46693944febf7ae26ec67a0\"}"
雷迪斯 127.0.0.1:6379>
从上面可以看出,工作人员被分配到“默认”队列,我猜因此工作人员无法处理。
对于上述场景,我使用以下命令启动了 sidekiq:
bundle exec sidekiq -e dev_mysql -C config/sidekiq.yml -q bulk_mails
但是,当我从我的工人中删除时
sidekiq_options(queue: :bulk_mails, backtrace: true)
并使用以下命令启动 sidekiq:
bundle exec sidekiq -e dev_mysql -C config/sidekiq.yml
它有效(换句话说,它成功发送了电子邮件)。
/config/sidekiq.yml
# https://github.com/mperham/sidekiq/wiki/Logging
# http://stackoverflow.com/questions/15260634/sidekiq-configuration-for-multiple-environments
---
:verbose: true
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:concurrency: 25
我刚开始使用 Sidekiq 并且是新手。所以如果我有一些我误解或不知道的概念,请多多包涵。
我需要摆脱上述问题,以便我的工作人员被分配到所需的队列并成功处理。
谢谢,吉涅什