ruby - Sidekiq 使作业入队,而不是使它们出队

标签 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=>[]}}

最佳答案

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

关于ruby - Sidekiq 使作业入队,而不是使它们出队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667374/

相关文章:

ruby-on-rails - 为什么这个数组切片返回一个空数组而不是 nil?

ruby - 如何使用 Ruby 的命令行就地编辑模式从文本文件中删除行

html - 使用大量 HTML 渲染页面

html - Rails 4 - 导出整个 html 页面以供下载

javascript - 通过单击按钮栏添加文本区域 4

mysql - 将 MySQL 中的主键映射到 Redis

找不到php Symfony2 redis类

ruby-on-rails - Rails cron 作业每天运行以创建 2 年后的数据库记录。闰年如何计算?

ruby - 创建一个方法来查找数字是否是 2 的幂?

redis - 如何在 REDIS 中标记一个键,以便以后我可以删除所有与该标签匹配的键?