Sidekiq 一直在完美地工作于开发模式。现在我正在尝试在生产中使用它,所有的工作都只是坐在队列中并且从未运行过。谁能指出我如何解决这个问题的正确方向?
7 回答
请检查 sidekiq 进程是否实际运行:
ps aux | grep sidekiq
如果不是,请先尝试在前台运行 sidekiq 并检查输出。
bundle exec sidekiq -e production
在很多情况下,对我来说,这是因为我没有在config/sidekiq.yml
.
这个答案看起来很相关: Sidekiq not processing queue 如果 Sidekiq 没有被告知配置文件(在生产中可能需要不同的咒语),那么它可能没有使用正确的队列。
当我结束这个页面试图弄清楚为什么我的 Rails Sidkiq 工作没有离开“排队”时,只是提醒大家。
- 在终端中检查 sidekiq 控制台
- 我的问题把我搞砸了将近一个小时......呃......我在代码中有一个'byebug'断点,放在后台作业中很愚蠢。这会完全搞砸你的工作。显然......我不是故意把那个断点放在那里的。我发誓 :)
我的解决方案:
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 。gemcapistrano-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 server@103.n.nnn.nnn 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 解决了我们的问题