1
votes

Comment supprimer un travail planifié Sidekiq?

Je suis coincé dans un problème, je ne sais pas comment supprimer les tâches planifiées sidekiq J'ai essayé avec beaucoup de méthodes mais je n'ai pas réussi

​​Voici mon code: -

Sidekiq::ScheduledSet.new("es_sync")
ArgumentError: wrong number of arguments (given 1, expected 0)

Mais après l'exécution, j'obtiens l'erreur ci-dessous: -

{"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)"

Et quand j'ai essayé d'exécuter dans la console, j'obtiens également une erreur pour un argument erroné: -

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

S'il vous plaît, quelqu'un suggère ou m'aide avec cette situation. Merci d'avance :)


0 commentaires

4 Réponses :


4
votes

L'erreur décrit le problème:

Sidekiq::ScheduledSet.new

Vous voulez:

ArgumentError: wrong number of arguments (given 1, expected 0)


4 commentaires

Mais je dois obtenir des emplois selon une file d'attente spécifique. c'est possible ou pas?


car ma file d'attente de planification est trop grande.


Une file d'attente contient des travaux prêts à être exécutés maintenant . Tous les travaux planifiés sont conservés dans ScheduledSet jusqu'à ce que l'heure soit prête pour leur mise en file d'attente. Votre travail n'est pas encore dans une file d'attente.


Comme l'indique clairement la page API, l'analyse et la suppression des tâches avec l'API sont très lentes. Ce n'est pas la bonne voie à suivre. Utilisez l'annulation ou utilisez des tâches cron dynamiques pour démarrer immédiatement le travail - ne le planifiez pas s'il risque de ne pas s'exécuter.



1
votes

Suivez simplement les étapes ci-dessous:

ss = Sidekiq::ScheduledSet.new
jobs = ss.scan("SomeWorker").select {|retri| retri.klass == 'SomeWorker' }
jobs = ss.select {|retri| retri.klass == 'SomeWorker' }
jobs.each(&:delete)


0 commentaires

1
votes

Il vous suffit de rechercher les tâches planifiées et de les supprimer avec toute condition correspondant à votre base de code.

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


0 commentaires

0
votes
def delete_scheduled_jobs
    Sidekiq::ScheduledSet.new.each do |job|
      job.delete if job.queue.to_sym == :job_name_queue
    end
end

1 commentaires

Veuillez ajouter quelques explications