Sidekiq / Redis对不存在的作业进行排队

问题描述 投票:2回答:1

我为Sidekiq构建了一个简单的测试作业,并将其添加到Sidekiq Cron的schedule.yml文件中。

这是我的测试工作:

module Slack
  class TestJob < ApplicationJob
    queue_as :default

    def perform(*args)
      begin
        SLACK_NOTIFIER.post(attachments: {"pretext": "test", "text": "hello"})
      rescue Exception => error
        puts error
      end
    end
  end
end

[SLACK_NOTIFIER这是我在启动时初始化的用于Slack的简单API客户端。

在我的schedule.yml中:

test_job:
  cron: "* * * * *"
  class: "Slack::TestJob"
  queue: default
  description: "Test"

所以我想让它每分钟运行一次,并且完全按照我的预期工作。

但是,我现在已经删除了作业文件,并从schedule.yml中删除了该作业,它仍然尝试每分钟运行一次作业。我已经进入了sidekiq仪表板,并且看到大量重试该工作的信息。无论我杀死了他们多少次,它们都会不断地出现。

我已经尝试多次关闭redis服务器和sidekiq。我尝试关闭计算机(当然,在杀死服务器之后)。它仍然会继续安排这些作业,并且会中断我的其他作业,因为它会引发以下异常:

NameError: uninitialized constant Slack::TestJob

我已经在项目范围内搜索“ TestJob”,但没有结果。

我只用大约10分钟的时间就打开了Redis服务器并完成了这项工作...

redis数据库中是否可能存在某些问题?我研究了redis-cli文档,但我认为没有任何帮助。

ruby-on-rails redis cron sidekiq sidekiq-cron
1个回答
0
投票

尝试在redis客户端中调用$ FLUSHALL ...

除此之外...

sidekiq-cron documentation似乎希望您明确检查schedule.yml的存在...

#initializers/sidekiq.rb
schedule_file = "config/schedule.yml"

if File.exist?(schedule_file) && Sidekiq.server?
  Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
end
© www.soinside.com 2019 - 2024. All rights reserved.