Sidekiq 一直在完美的开发模式下工作。现在我尝试在生产中使用它,所有作业都只是坐在队列中并且从未运行。有人能指出我如何解决这个问题的正确方向吗?
请检查 sidekiq 进程是否实际运行:
ps aux | grep sidekiq
如果不是,请尝试先在前台运行 sidekiq 并检查输出。
bundle exec sidekiq -e production
在很多情况下,对我来说,这是因为我没有在
config/sidekiq.yml
中正确声明此特定服务的队列。
这个答案看起来很相关: Sidekiq 不处理队列 如果 Sidekiq 没有被告知配置文件(在生产中可能需要不同的咒语),那么它可能没有使用正确的队列。
请注意,当我结束此页面时试图找出为什么我的 Rails Sidkiq 作业没有脱离“排队”状态。
我的解决方案:
1.) 查看您应用程序的 Sidekiq Web UI(在这里您可以看到作业正在进入排队状态)。
2.) 手动重试失败的作业
3.) 检查运行 Sidekiq 的服务器上的日志:
(如果说您在登台时执行此操作,通常这是日志所在的位置)
tail -f /var/www/yourappname/current/log/staging.log
您通常会在此处看到更详细的错误消息,说明 Sidekiq 无法处理排队作业的原因。在我们的例子中,有一个环境变量指向特定于我们的部署配置的错误端点。
确保您的应用程序 sidekiq 进程运行
$ ps aux | grep sidekiq
server 26813 0.0 0.0 14228 1084 pts/11 S+ 11:27 0:00 grep --color=auto sidekiq
server 27936 0.3 0.6 1178904 153240 ? Sl Apr17 46:02 sidekiq 5.2.7 app1 [0 of 10 busy]
示例显示只有一个 sidekiq 进程正在运行(app1)。如果您的应用程序不在列表中,那么您必须为您的应用程序启动 sidekiq 进程,在此示例中为 app2 。 gem
capistrano-sidekiq
让您的生活更轻松:
$ cap production sidekiq:start
00:00 sidekiq:start
01 $HOME/.rbenv/bin/rbenv exec bundle exec sidekiq --index 0 --pidfile /var/www/app2/shared/tmp/pids/sidekiq-0.pid --environment produ…
✔ 01 [email protected] 0.400s
并且app2进程将被激活。现在再检查一下
$ ps aux | grep sidekiq
server 25857 8.6 7.6 3073532 1870244 ? Sl 11:15 1:02 sidekiq 5.2.8 app2 [0 of 10 busy]
server 26813 0.0 0.0 14228 1084 pts/11 S+ 11:27 0:00 grep --color=auto sidekiq
server 27936 0.3 0.6 1178904 153240 ? Sl Apr17 46:02 sidekiq 5.2.7 app1 [0 of 10 busy]
队列应该正常运行
使用
capistrano-sidekiq
gem 解决了我们的问题