Sidekiq可以阻止哪些可能的原因来处理队列中的作业?队列已满。日志文件sidekiq.log表明完全没有活动。因此,队列已满,但日志为空,Sidekiq似乎未处理项目。似乎没有工人在处理工作。重新启动Redis或用FLUSHALL或FLUSHDB冲洗均无效。Sidekiq已开始于
sidekiq.log
捆绑执行程序sidekiq -L log / sidekiq.log
并生成以下日志文件:
2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {} 2013-05-30..Running in ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux] 2013-05-30..See LICENSE and the LGPL-3.0 for licensing details. 2013-05-30..Starting processing, hit Ctrl-C to stop
您如何找出问题所在?是否有隐藏的日志文件?
原因是在我们的案例中:Sidekiq可能查找错误的队列。默认情况下,Sidekiq使用名为“默认”的队列。我们使用了两个不同的队列名称,并在config / sidekiq.yml中定义了它们。
# configuration file for Sidekiq :queues: - queue_name_1 - queue_name_2
问题在于,默认情况下,此配置文件 不会 在您的开发环境中通过简单的命令 自动加载 (不同于database.yml或thinking_sphinx.yml例如)bundle exec sidekiq。因此,我们将作业写在两个特定的队列中,而Sidekiq正在等待第三个队列(默认队列)中的作业。您必须通过-C或--config选项将路径作为参数传递到配置文件:
database.yml
thinking_sphinx.yml
bundle exec sidekiq
-C
--config
bundle exec sidekiq -C ./config/sidekiq.yml
或者,您可以直接传递队列名称(逗号后在此处不允许空格):
bundle exec sidekiq -q queue_name_1,queue_name_2
要找出问题所在,也可以通过选项-v或--verbose在命令行中传递或在文件中使用是很有帮助:verbose: true的sidekiq.yml。如果未加载配置文件,则配置文件中定义的所有内容当然都是无用的。因此,请确保首先使用正确的配置文件。
-v
--verbose
:verbose: true
sidekiq.yml