【问题标题】:Sidekiq jobs stuck in enqueueSidekiq 作业卡在队列中
【发布时间】:2026-02-12 03:10:01
【问题描述】:

Sidekiq 一直在完美地工作于开发模式。现在我正在尝试在生产中使用它,所有的工作都只是坐在队列中并且从未运行过。谁能指出我如何解决这个问题的正确方向?

【问题讨论】:

  • 我假设您至少在生产中运行了一个 sidekiq 工作人员?
  • 是的,我相信是的。你到底什么意思?我确实通过运行以下命令启动了 Sidekiq:bundle exec sidekiq -d -L /path/to/log。还有一个对我在 Rails 代码中创建的工作人员的异步调用。
  • 您的日志中有什么内容?你看到sidekiq流程了吗? (ps aux | grep sidekiq) 你的 sidekiq 控制台中有什么?
  • 您是否将作业放入默认队列中?
  • 如果您发布了 'ps aux | 的完整输出,您的 sidekiq 进程似乎根本没有启动。 grep sidekiq' 命令。尝试先在前台启动 sidekiq,无需任何其他选项,只需 'bundle exec sidekiq'

标签: ruby-on-rails ruby-on-rails-3 redis ubuntu-10.04 sidekiq


【解决方案1】:

请检查sidekiq进程是否实际运行:

ps aux | grep sidekiq

如果不是,请先尝试在前台运行sidekiq并检查输出。

bundle exec sidekiq -e production

【讨论】:

  • 如此简单,却又如此正确。在我的特殊情况下,我的工作文件配置错误,它正在杀死 sidekiq 进程
【解决方案2】:

对我来说,在很多情况下,这是因为我没有在config/sidekiq.yml 中正确声明此特定服务的队列。

【讨论】:

  • 为此奋斗了一段时间。 Rails 在mailers 中排队,但我的配置中有mailer
  • 希望我能放弃更多的上涨。错过这个真是令人沮丧。
【解决方案3】:

这个答案看起来很相关: Sidekiq not processing queue 如果 Sidekiq 没有被告知配置文件(在生产中可能需要不同的咒语),那么它可能没有使用正确的队列。

【讨论】:

  • 其实我就是这样
  • 如果您使用 capistrano-sidekiq 的默认选项,就会出现这种情况。您必须设置配置文件设置。
【解决方案4】:

当我结束这个页面试图弄清楚为什么我的 Rails Sidkiq 工作没有离开“排队”时,只是提醒大家。

  1. 在终端中检查 sidekiq 控制台
  2. 我的问题让我搞砸了将近一个小时...呃...我在代码中有一个 'byebug' 断点,将其放入后台作业很愚蠢。这会完全搞砸你的工作。显然......我不是故意把那个断点放在那里的。我发誓:)

【讨论】:

    【解决方案5】:

    我的解决方案:

    1.) 查看您的应用的 Sidekiq Web UI(在这里您可以看到作业进入排队状态的事实)。

    2.) 手动重试失败的作业

    3.) 检查运行 Sidekiq 的服务器上的日志:

    (通常这是日志所在的位置,如果说您在暂存时执行此操作)

    tail -f /var/www/yourappname/current/log/staging.log
    

    通常您会在此处看到更详细的错误消息,说明 Sidekiq 无法处理排队作业的原因。在我们的例子中,有一个环境变量指向特定于我们的部署配置的不正确端点。

    【讨论】:

      【解决方案6】:

      确保您的应用程序 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 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]
      

      队列应该已经正常运行了

      【讨论】:

        【解决方案7】:

        使用capistrano-sidekiq gem 解决了我们的问题

        【讨论】: