繁体   English   中英

如何使用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

并在Rails控制台的新终端窗口中运行

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

作业正在运行,ffmpeg在后台运行,一切都很好,但是根据官方的sidekiq Wiki文档,我尝试:

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

为什么没有工作? 作业运行成功(我在sidekiq启动的第一个窗口中也看到了它,但是在rails控制台中看不到并删除了它)

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

最好的问候,罗斯兰。

UPD:看来ps = Sidekiq::ProcessSet.new; ps.each(&:quiet!) 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和各种队列。 如果我发现某项特定的作业失败,则可以清除相同类别的后续作业的队列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM