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 :)
4 Réponses :
L'erreur décrit le problème:
Sidekiq::ScheduledSet.new
Vous voulez:
ArgumentError: wrong number of arguments (given 1, expected 0)
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.
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)
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
def delete_scheduled_jobs Sidekiq::ScheduledSet.new.each do |job| job.delete if job.queue.to_sym == :job_name_queue end end
Veuillez ajouter quelques explications