Sidekiq工作陷入了排队

时间:2013-06-20 03:34:04

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

Sidekiq一直在开发模式中完美地工作。既然我正在尝试在生产中使用它,那么所有的工作都只是坐在队列中,而不是一直在运行。有人能指出我如何解决这个问题的正确方向吗?

7 个答案:

答案 0 :(得分:35)

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

ps aux | grep sidekiq

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

bundle exec sidekiq -e production

答案 1 :(得分:3)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

我的解决方案:

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

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

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

(通常这是日志所在的位置,如果你在登台时这样做的话)

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

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

答案 4 :(得分:1)

当我结束此页面时,请直奔所有人,以弄清为什么我的Rails Sidkiq作业没有摆脱“排队”的原因。

  1. 在终端中检查您的sidekiq控制台
  2. 我的问题困扰了我近一个小时……嗯……我在代码中有一个'byebug'断点,该代码很愚蠢,无法放入后台工作。这将完全破坏您的工作。显然……我不是要把那个断点放在那里。我发誓:)

答案 5 :(得分:0)

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

答案 6 :(得分:0)

确保您的应用程序sidekiq进程运行

import QtQuick 2.14
import QtQuick.Controls 2.14
import QtMultimedia 5.14

import AudioHelper 1.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480

    MediaPlayer {
        id: player
        source: "video.mkv"
    }

    PlayerHelper{
        id: playerhelper
        qmlplayer: player
    }

    VideoOutput {
        id: videoOutput
        source: player
        anchors.fill: parent

        focus: true
        Keys.onSpacePressed: player.playbackState == MediaPlayer.PlayingState ? player.pause() : player.play()
        Keys.onLeftPressed: player.seek(player.position - 5000)
        Keys.onRightPressed: player.seek(player.position + 5000)

        MouseArea{
            anchors.fill: parent
            acceptedButtons: Qt.LeftButton | Qt.RightButton
            onClicked: {

                if (mouse.button == Qt.LeftButton){
                    player.play()
                }
                else{
                    var count = playerhelper.audioCount()
                    var index = playerhelper.audioActive()

                    while(context_menu.count){
                        var it = context_menu.takeItem(0)
                        it.destroy()
                    }

                    for(var i = 0; i < count; ++i){
                        var item = Qt.createQmlObject('import QtQuick 2.13; import QtQuick.Controls 2.13; MenuItem {}', context_menu)
                        item.text = "Audio " + i;
                        item.checkable = true
                        item.checked = i == index 
                        var f = function(it, i){ 
                            it.triggered.connect(function (){ 
                                playerhelper.setAudioActive(i)
                            }
                        )}
                        f(item, i)
                        context_menu.addItem(item)
                    }

                    context_menu.popup(mouseX, mouseY)
                }
            }
        }

        Menu {
            id: context_menu
        }
    }
}

该示例显示仅运行一个sidekiq进程(app1)。如果您的应用程序不在列表中,那么您必须为应用程序启动sidekiq流程,在本示例中为app2 。宝石$ 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] 使您的生活更轻松:

capistrano-sidekiq

,app2进程将被激活。现在,再次检查

$ 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

队列应该已经正常运行