如何使用 ActiveJob 终止 Rails 4 中的 sidekiq 作业

How to kill sidekiq job in Rails 4 with ActiveJob

假设我们有测试工作:

class TestJob < ActiveJob::Base
  queue_as :default

  def perform(video)
    video.process
  end
end

之后我们运行bundle exec sidekiq start

和运行在新终端window在rails控制台

Video.first.pending!; TestJob.perform_later(Video.first)

作业 运行ning,ffmpeg 在后台运行,一切正常,但根据 official sidekiq wiki docs 我尝试:

require 'sidekiq/api'
Sidekiq::Queue.new
=> #<Sidekiq::Queue:0x00000006406978 @name="default", @rname="queue:default">

Sidekiq::Queue.new.each {|job| puts job}
=> nil
Sidekiq::Queue.new.size
=> 0
ss = Sidekiq::ScheduledSet.new
=> #<Sidekiq::ScheduledSet:0x000000064a4330 @_size=0, @name="schedule">
ss.size
=> 0

为什么没有职位?作业 运行ning 成功(我也在第一个 window sidekiq 启动的地方看到它,但我无法在 rails 控制台中看到和删除它)

如果有帮助,我正在使用 Ubuntu 14

此致,Ruslan。

更新: 看起来 ps = Sidekiq::ProcessSet.new; ps.each(&:quiet!) 作品 ,但它并没有阻止我的 ffmpeg 处理这部分内部代码:

cmd = "ffmpeg -i #{input_file.shellescape} #{options} -threads 0 -y #{self.path + outfile}"
pid = spawn(cmd, :out => output_file, :err => output_file)
Process.wait(pid)

如何停止?

如果作业正在处理,则不再排队。

我使用 sidekiq web UI 和各种队列来处理我的工作。如果我意识到特定作业失败,我可以清除相同 class 的后续作业队列。