سؤال

أنا أستخدم 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

ستتم إعادة إنشاء قوائم الانتظار في المرة التالية التي يتم فيها إدراج وظيفة في قائمة الانتظار.

الوثائق

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top