সাইডিকিক থেকে সমস্ত কাজ কীভাবে সাফ করবেন?


118

আমি রেল অ্যাপ্লিকেশনটিতে ব্যাকগ্রাউন্ড টাস্কের জন্য সাইডিকিক ব্যবহার করছি। এখন কাজের সংখ্যা আরও বেশি হয়ে গেছে, তাই আমি সমস্ত কাজ পরিষ্কার করতে চাই। আমি কনসোলে নিম্নলিখিত কমান্ডটি চেষ্টা করেছি

Sidekiq::Queue.new.clear

কিন্তু এটি নিম্নলিখিত ত্রুটি দিচ্ছিল।

NameError: uninitialized constant Sidekiq::Queue 

আমি সাইডিকিক থেকে সমস্ত কাজ কীভাবে সাফ করব?


include 'sidekiq'আগে চেষ্টা করুন
বেনজ

ভুল যুক্তি টাইপ স্ট্রিং (মডিউল প্রত্যাশিত): তার দান TypeError @BenjaminSinclaire
পারে

3
require 'sidekiq'আগে চেষ্টা করুন
উরি আগাসি

1
আমি সবসময় (সত্যিই সবসময়) দ্বিধায় পরে অন্তর্ভুক্ত করা এবং প্রয়োজন :)
Benj

উত্তর:



206

আপনি 1077 ইস্যুতে যেমন বলেছেন বা নোগিপসেটে এই ব্লগে উল্লিখিত হিসাবে আপনি এটি করতে পারেন

উভয়ই পরামর্শ দেয় যে আমরা নিম্নলিখিতটি করি এবং রেল কনসোলে করা যায়:

Sidekiq.redis { |conn| conn.flushdb }


এটি আমি ব্যবহার করছি এমন রেল অ্যাপ্লিকেশনগুলিতে আমার প্রমাণীকরণ পুনরায় সেট করার জন্য উপস্থিত হয় (যার অর্থ আমাকে আমার এইচটিটিপি ক্লায়েন্টে কুকিজ আবার অনুলিপি করতে হবে)। তা রোধ করার কোনও উপায় আছে কি?
ইন্ট্রিক্রটর

1
হ্যালো, ব্র্যান্ডিমন আপনি কি আপনার প্রকল্পের অধিবেশন নিয়ন্ত্রণ করতে redis ব্যবহার করছেন? কারণ এই কমান্ডগুলি রেডিসে সঞ্চিত সমস্ত ডেটা "পরিষ্কার" করতে হয়, এটি রিলেশনাল ডাটাবেজে একটি ড্রপ ডাটাবেস বা ড্রপ টেবিলের সমতুল্য।
jonathanccalixto

1
এটির ভোট বিবেচনা করে গ্রহণযোগ্য উত্তর হওয়া উচিত।
এম হাবিব

redis-cli flushdbআপনি যদি আপনার রেল সার্ভার থেকে আলাদা সার্ভারে redis চালিয়ে যাচ্ছেন তার চেয়ে এটি আরও অনুমানযোগ্যভাবে কাজ করে । আমি ভাবছিলাম যে redis-cli flushdbহোস্ট এবং পোর্ট আর্গুমেন্টগুলি অন্তর্ভুক্ত করা দরকার আমার মনে না হওয়া পর্যন্ত কেন কাজ হয়নি।
মারিস

4
এই পদ্ধতির সমস্যাটি হ'ল যদি আপনি বিভিন্ন পরিষেবা জুড়ে একই রেডিস / ইলাস্টিকাকে ভাগ করে নিচ্ছেন তবে এটি রেডিস ডিবিতে থাকা সমস্ত অন্যান্য ডেটাও সাফ করবে।
চার্লস স্কারিয়ায়

80

সাইডিক্যাক জবস কমান্ড সাফ করুন:

require 'sidekiq/api'

# Clear retry set

Sidekiq::RetrySet.new.clear

# Clear scheduled jobs 

Sidekiq::ScheduledSet.new.clear

# Clear 'Dead' jobs statistics

Sidekiq::DeadSet.new.clear

# Clear 'Processed' and 'Failed' jobs statistics

Sidekiq::Stats.new.reset

# Clear specific queue

stats = Sidekiq::Stats.new
stats.queues
# => {"main_queue"=>25, "my_custom_queue"=>1}

queue = Sidekiq::Queue.new('my_custom_queue')
queue.count
queue.clear

3
আপনি এর সাথে সমস্ত Sidekiq::Queue.all.map(&:clear)
সারিও

36

সর্বশেষ সাইডিকিক হিসাবে, কেবল এটি ফুটিয়ে তুলুন:

require 'sidekiq/api'

q = Sidekiq::Queue.new
q.💣

হ্যাঁ, সমস্ত মুছে ফেলার আদেশটি আক্ষরিক অর্থে বোমা ইমোজি। এছাড়াও কাজ করে Sidekiq::RetrySet

বা আপনি যদি মজা না পান তবে আপনি ব্যবহার করতে পারেন q.clear


1
ওএমজি, এই হেক কি? @ জাভিয়ার, নামকরণের পদ্ধতি রয়েছে।
কোডমিলান

2
@ কোডেমিলান এই ব্লগ পোস্টটি দেখুন: blog.honeybadger.io/…
মোডাস

আমি invalid byte sequence in US-ASCII (ArgumentError)মৃত্যুদন্ড কার্যকর করেছি q.💣: /
শঙ্কর তায়াগরাজন

21
redis-cli flushdb

আপনি ব্যবহার করতে পারেন redis-cli flushall


5
এই পদ্ধতির সমস্যাটি হ'ল যদি আপনি বিভিন্ন পরিষেবা জুড়ে একই রেডিস / ইলাস্টিকাকে ভাগ করে নিচ্ছেন তবে এটি ডিবিতে থাকা সমস্ত অন্যান্য ডেটাও সাফ করে দেবে।
চার্লস স্কারিয়ায়

13

এক লাইনে রেল রানার ব্যবহার করুন

rails runner 'Sidekiq.redis { |conn| conn.flushdb }'



1

আপনি যদি নির্দিষ্ট সারি থেকে কাজগুলি মুছতে চান তবে চেষ্টা করুন:

queue = Sidekiq::Queue.new("default")
queue.each do |job|
  job.klass # => 'TestWorker'
  job.args # => ['easy']
  job.delete if job.jid == 'abcdef1234567890' || job.klass == 'TestWorker'
end

সাইডিকিক এবং গুরুত্বপূর্ণ কনসোল কমান্ডগুলি সম্পর্কে সমস্ত পড়ুন- https://medium.com/@shashwat12june/all-you-need-to-know-about-sidekiq-a4b770a71f8f



0

আমি বুঝতে পেরেছি যে Sidekiq.redis { |conn| conn.flushdb }redis ডাটাবেস থেকে সমস্ত কী সরিয়ে দেয়। ব্যবহার করে সমস্ত পাশের সারিগুলি সাফ করার একটি নিরাপদ উপায় রয়েছে redis-cli:

redis-cli keys "*queue:*" | xargs redis-cli del

সাইডিকিক এপিআই দিয়ে একই অর্জন করা যেতে পারে ( রবি প্রকাশ সিংহের উত্তর দেখুন )

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