كيفية تدمير الوظائف التي يصطفها عمال الإنقاذ؟
-
28-10-2019 - |
سؤال
أنا أستخدم Resque في مشروع Rails-3 للتعامل مع المهام المجدولة للتشغيل كل 5 دقائق.لقد قمت مؤخرًا بشيء أدى إلى زيادة إنشاء هذه الوظائف ووصلت المجموعة إلى أكثر من 1000 وظيفة.لقد أصلحت المشكلة التي تسببت في وضع العديد من الوظائف في قائمة الانتظار، والمشكلة التي أواجهها الآن هي أن الوظائف التي أنشأها الخطأ لا تزال موجودة، وبالتالي يصبح من الصعب اختبار شيء ما نظرًا لإضافة وظيفة إلى قائمة انتظار تحتوي على أكثر من 1000 وظيفة.يبدو أنني لا أستطيع إيقاف هذه الوظائف.لقد حاولت إزالة قائمة الانتظار من redis-cli باستخدام أمر flashall لكنه لم ينجح.هل فاتني شيء؟لأنني لا أستطيع أن أجد طريقة للتخلص من هذه الوظائف.
المحلول
إذا قمت بفتح وحدة تحكم في القضبان ، فيمكنك تشغيل هذا الرمز لمسح قائمة (قوائم) الانتظار: Genacodicetagpre
نصائح أخرى
تشغيل الإجابات المذكورة أعلاه ، إذا كنت بحاجة إلى مسح جميع قوائم الانتظار ، فيمكنك استخدام ما يلي: Genacodicetagpre
لدى Resque بالفعل طريقة للقيام بذلك - حاول Resque.remove_queue(queue_name)
(انظر الوثائق هنا).داخليا ينفذ Resque.redis.del()
, ، ولكنه يقوم أيضًا بعمليات تنظيف أخرى، وباستخدام طريقة واجهة برمجة التطبيقات (بدلاً من وضع افتراضات حول كيفية عمل resque) ستكون أكثر قابلية للمستقبل.
مهمة rake المحدثة للمسح (وفقًا لأحدث تغييرات أوامر redis): https://gist.github.com/1228863
هذا ما يعمل الآن: Genacodicetagpre
أدخل وحدة تحكم redis:
redis-cli
قائمة قواعد البيانات:
127.0.0.1:6379> KEYS *
1) "resque:schedules_changed"
2) "resque:workers"
3) "resque:queue:your_overloaded_queue"
"resque:queue:your_overloaded_queue"
- ديسيبل الذي تحتاجه.
ثم اركض:
DEL resque:queue:your_overloaded_queue
أو إذا كنت تريد حذف المهام المحددة في قائمة الانتظار، فقم بإدراج بعض القيم من قاعدة البيانات باستخدام LRANGE
يأمر:
127.0.0.1:6379> LRANGE resque:queue:your_overloaded_queue 0 2
1) "{\"class\":\"AppClass\",\"args\":[]}"
2) "{\"class\":\"AppClass\",\"args\":[]}"
3) "{\"class\":\"AppClass\",\"args\":[]}"
ثم انسخ/الصق قيمة واحدة إلى LREM
يأمر:
127.0.0.1:6379> LREM resque:queue:your_overloaded_queue 5 "{\"class\":\"AppClass\",\"args\":[]}"
(integer) 5
حيث 5- عدد العناصر المراد إزالتها.
يعد استخدام Resque API أكثر أمانًا ومقاوم للرصاص بدلاً من حذف كل شيء في Resque's Redis.يقوم Resque ببعض التنظيف في الداخل.
إذا كنت تريد إزالة جميع قوائم الانتظار والمهام المرتبطة بها في قائمة الانتظار: Genacodicetagpre
ستتم إعادة إنشاء قوائم الانتظار في المرة التالية التي يتم فيها إدراج وظيفة في قائمة الانتظار.