পাশের সারি পরিষ্কার করুন


93

আমি এই কর্মী যে চিরকাল চলমান।

class Worker
  include Sidekiq::Worker
  sidekiq_options queue: "infinity", retry: true

  def perform(params)
    # ...
    self.class.perform_in(30.seconds, params)
  end
end

সমস্যাটি হ'ল আমি স্টার্ট আপে শ্রমিকদের এইরকম লোড করি। config/initializers/load_workers.rb

Rails.application.config.after_initialize do  
  if ENV["SIDEKIQ"] == "1"
    Worker.perform_async({})
  end
end

সাইডিকিক শুরু করার জন্য এটি ব্যবহার করে SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml

এর অর্থ হ'ল পুরানো কর্মীরা, যাঁরা বর্তমানে চলছেন, তাঁরাও তবে যাঁরা পুনরায় নির্ধারিত হচ্ছেন তারা stop

আমি এটি শুরুতে চালানোর চেষ্টা করেছি (নতুন কাজ লোড করার ঠিক আগে), কিন্তু এটি কার্যকর হয়নি।

q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)

5-ইশ মোতায়েনের পরে পরে নির্ধারিত কাতারে ডুপ্লিকেট কর্মীদের গুচ্ছ রয়েছে। সুতরাং, একটি কাতারে প্রতিটি জিনিস সাফ করার এবং ইতিমধ্যে চলমান কাজগুলিকে পুনঃনির্ধারণ থেকে আটকাতে কোনও উপায় আছে?

আমি সাইডিকিক 3.0 ব্যবহার করছি।


আপনি কি একটি সারি বা একটি নির্ধারিত কাজ মুছতে চান। বা ডুপ্লিকেট নির্ধারিত কাজ বলা ভাল।
সব্যসাচী ঘোষ

নতুন কর্মীটি লোড করার আগে আমি কোনও কাজের প্রতিটি চিহ্ন মুছতে চাই।
লিনাস অলিয়ান্ডার

ঠিক আছে আপনার সমস্যা হয়ে গেছে .. এর অর্থ আপনি নির্ধারিত সমস্ত কাজ মুছতে চান।
সব্যসাচী ঘোষ

@ হাইস্যাব্যাছিচি ঘোষ না, আমি কেবলমাত্র নির্ধারিত কাজগুলি নয়, একটি সারি সম্পর্কিত সমস্ত কিছু মুছতে চাই। অন্য কথায়; ব্যর্থ, চলমান, সারিযুক্ত এবং নির্ধারিত কাজ মুছে ফেলা উচিত।
লিনাস অ্যালিয়েন্ডার

সমস্ত সাহায্যের এখানে - github.com/mperham/sidekiq/wiki/API
viks

উত্তর:


161

একটি সারিতে সমস্ত কাজ মুছে ফেলে, সারিটি সরিয়ে।

require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear

সাইডিক্যাক হতে পারে প্রো আপনাকে সাহায্য করবে।
রঞ্জিতকুমার রবি

4
এখানে কাউন্টারগুলি সাফ করার জন্য Sidekiq::Stats.new.resetআমি জানতে পারি যে এটি সাহায্য করে

14
ডিফল্ট / প্রথম Sidekiq::Queue.all.first.clear
সারিটি

4
সাইডিকাক :: কুই.নিউ ("রিপোর্টস")। পরিষ্কার এবং সাইডিকিক :: কুই.নিউ ("সতর্কতা")। পরিষ্কার বর্তমান সারিটি সাফ করতে সহায়তা করে। তবে ব্যস্ততা কী? আমি "ব্যস্ত" কাজগুলি কীভাবে সাফ করব?
ডোনাটো

31
তাদের দিয়ে সমস্ত সাফ করুনSidekiq::Queue.all.each &:clear
মার্কো লাজেরি

95

এটি আমার জন্য কৌশলটি করেছে:

Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear

4
ধন্যবাদ এটি একটি মোহন মত কাজ করলো আমি জরুরি অবস্থার killমধ্যে
পড়লাম, সাইডিকিকটি ওয়াহাআয়ের

নিখুঁত, কেবল এটিকে যুক্ত করে আমার এনভিটিতে আমাকে require 'sidekiq/api'কাজ করার জন্য কনসোলে যেতে হয়েছিল।
Bonafernando

19

বেশিরভাগ সাইডিক্যাক সংস্করণগুলির জন্য আমার পক্ষে কাজ করে:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

পরিসংখ্যান পরিষ্কার করুন (ptionচ্ছিক)

Sidekiq::Stats.new.reset

এটি কেবল সারি নয়, পুরো ডাটাবেসকে ফ্লাশ করে।
লিনাস অ্যালিয়েন্ডার

সাইডিকিকের সমস্ত ডাটাবেস ফ্লাশ করে দিলে এবং রেল কনসোলে সূক্ষ্মভাবে কাজ করবে
উইন্ডোজ পাঞ্জা

-2

বিল্ট-ইন পদ্ধতি থাকলেও আপনি এই কোডটি চালিয়ে আপনার সারিটি সাফ করতে পারেন।

queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete 
end

ঠিক আছে, এটি কাজ করা উচিত যেমন আমরা সারি থেকে সমস্ত কাজগুলি এনেছি এবং তারপরে একে একে মুছে ফেলেছি।
আসাদ হামেদ

না এটা হয় না। বিদ্যমান উত্তরগুলি একবার দেখুন। এটি বিদ্যমান উত্তরের একটি সদৃশও।
লিনাস অ্যালিয়ান্ডার 6

আমি জানি না আপনি কি সম্পর্কে কথা বলছেন। আমি পোস্ট করা একই উত্তর আমাকে দয়া করে দেখাতে পারেন?
আসাদ হামেদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.