如何删除 Sidekiq 预定作业?

cod*_*aks 6 ruby-on-rails sidekiq

我遇到了一个问题,我不知道如何删除 sidekiq 计划的作业我尝试了很多方法但没有成功

下面是我的代码:-

class UpdatePopularityWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'es_sync'

  def perform(city_id=nil)
    clear_popularity_jobs(city_id) 
    time = ENV['UPDATE_POPULARITY'].present? ? ENV['UPDATE_POPULARITY'].to_i : 60.minutes
    UpdatePopularityWorker.perform_in(time, city_id)
  end

  private

  def clear_popularity_jobs(city_id) 
    queued_jobs = Sidekiq::ScheduledSet.new("es_sync")
    jobs = queued_jobs.select{|retri| 
      retri.args == 'UpdatePopularityWorker' 
    }
    jobs.each(&:delete)
  end
end
Run Code Online (Sandbox Code Playgroud)

但执行后我收到以下错误:-

{"context":"Job raised exception","job":{"class":"UpdatePopularityWorker","args":[],"retry":true,"queue":"es_sync","jid":"db75d1e92933dfad69449dfa","created_at":1568050410.422802,"enqueued_at":1568050410.423174,"error_message":"wrong number of arguments (given 1, expected 0)"
Run Code Online (Sandbox Code Playgroud)

当我尝试在控制台中执行时,我也会收到错误参数的错误:-

Sidekiq::ScheduledSet.new("es_sync")
ArgumentError: wrong number of arguments (given 1, expected 0)
Run Code Online (Sandbox Code Playgroud)

请有人建议或帮助我解决这种情况。提前致谢 :)

May*_*hah 11

您只需找到计划作业并根据与您的代码库匹配的任何条件将其删除。

queue = Sidekiq::ScheduledSet.new
queue.each do |job|
  job.delete if (job.klass == 'Notification' && job.args.first == id)
end
Run Code Online (Sandbox Code Playgroud)


Mik*_*ham 4

该错误描述了问题:

ArgumentError: wrong number of arguments (given 1, expected 0)
Run Code Online (Sandbox Code Playgroud)

你要:

Sidekiq::ScheduledSet.new
Run Code Online (Sandbox Code Playgroud)

  • 正如 API 页面所表明的那样,使用 API 扫描和删除作业的速度非常慢。这不是正确的道路。要么使用取消,要么使用动态 cron 作业立即开始工作——如果它可能不运行,就不要安排它。 (2认同)