2012-05-01 11 views
9

में विशिष्ट नौकरी ढूंढें मेरे आवेदन में, मैं छवियों का आकार बदलने के लिए Resque का उपयोग कर रहा हूं। यदि कोई छवि आकार बदलने वाली कतार में है, तो मैं एक "आकार बदलने वाली छवि" आइकन दिखाना चाहता हूं।Resque queue

इसका मतलब है कि मुझे कतार में एक विशिष्ट मॉडल आईडी से संबंधित सभी मौजूदा नौकरियों को खोजने में सक्षम होना चाहिए। अभी मैं इसे इस तरह कार्य करें:

Resque.peek(:resize, 0, 100).find_all { |job| /#{model.id}/.match(job["args"][0]) } 

यह बेवकूफ है। लेकिन क्या सभी नौकरियों को खोजने के लिए रेस्क्यू कतार से पूछताछ करने का कोई तरीका है जहां पहला तर्क[id] के बराबर है?

अग्रिम धन्यवाद।

+0

मेरा मानना ​​है कि नौकरी संलग्न होने पर आप job_id पर कब्जा कर सकते हैं, फिर उस आईडी के साथ नौकरी की तलाश करके नौकरी की स्थिति की जांच करें। जाहिर है, आपको फिर से उपयोग के लिए कहीं भी आईडी स्टोर करना होगा। – d11wtq

+0

दरअसल, आपको ऐसा करने के लिए एक और मणि की आवश्यकता हो सकती है। बस अभी प्रयोग कर रहा है। – d11wtq

+1

यह आपको रूचि दे सकता है https: // github।com/quirkey/resque-status – d11wtq

उत्तर

5

रेज्यू कतार पूछने के बजाय, आपको अपने मॉडल के साथ छवि मेटा-डेटा स्टोर करना चाहिए।

मान लें कि आप उत्पाद छवियों को संग्रहीत कर रहे हैं। आप उत्पाद विवरण स्टोर करने के लिए एक रेडिस हैश का उपयोग कर रहे हैं। बस इस तरह एक और फ्लैग जोड़ने -

hset product:123 is_resizing true

आप उन्हें आकार बदलने छवि आइकन को दिखाने के लिए एक सरल देखने प्रदर्शन कर सकते हैं। अपने रिस्क्यू जॉब के अंत में, is_resizing कुंजी हटाएं, और resized_image_url कुंजी जोड़ें।

+1

इसके लिए धन्यवाद। मेरी ऐप संरचना हालांकि ऐसा करना मुश्किल बनाती है, क्योंकि मैं डीबी में इनमें से किसी भी छवि को संग्रहीत नहीं कर रहा हूं। यह मेरे ऐप की एक आवश्यकता है। लेकिन मुझे शायद किसी प्रकार की टेबल की ज़रूरत है जो मुझे बताती है कि वर्तमान में क्या आकार बदल रहा है। ऐसा लगता है कि सटीक डेटा Resque que में है। – Ronze

9

resque-status एक प्रयास दें। यह रेस्क्यू का विस्तार है जो जॉब ट्रैकिंग जोड़ता है।

रेज्यू-स्टेटस सरल कक्षाओं का एक सेट प्रदान करता है जो विशिष्ट नौकरी के उदाहरणों और उनकी स्थिति को ट्रैक करने के लिए ऐप्स को एक तरीका देने के लिए रेज की डिफ़ॉल्ट कार्यक्षमता (0% बंदर पैचिंग के साथ) का विस्तार करता है। यह यूयूआईडी के नौकरी के उदाहरण देकर और नौकरी के उदाहरणों को उनके पुनरावृत्तियों के भीतर से अपनी स्थिति की रिपोर्ट करने की इजाजत देता है।

नोट: d11wtq एक टिप्पणी के रूप में ऊपर यह उल्लेख किया है, लेकिन अभी तक वास्तव में सबसे अच्छा जवाब है।

+0

रेज्यू-स्टेटस प्रतिभाशाली, अमूल्य है। खासकर जब आप लंबे समय तक चलने वाली नौकरी के पूरा होने का ट्रैक ट्रैक करना चाहते हैं। – nessur

0

मुझे लगता है कि इस जानकारी को कैश करने के लिए एक रेडिस सेट का उपयोग करने का सबसे आसान तरीका हो सकता है।

जब आप 'आकार बदलें' कतार में कोई छवि जोड़ते हैं, तो छवि आईडी को SADD का उपयोग करके 'resize_in_progress' सेट में भी जोड़ें। (मुझे लगता है कि आपके पास छवि का संदर्भ देने के लिए किसी प्रकार की अनूठी कुंजी या नाम है, भले ही डीबी में संग्रहीत न हो। हो सकता है कि फ़ाइल नाम का पूरा पथ हो।)

'आकार बदलने' प्रक्रिया में, एक में से एक के रूप में छवि को सफलतापूर्वक आकार देने के बाद अंतिम क्रियाएं, इसे SREM कमांड का उपयोग करके सेट से हटा दें।

जब आप सभी छवियों की एक सूची चाहते हैं, तो आप इसे SMEMBERS के साथ ला सकते हैं। यदि आप केवल एक विशिष्ट मॉडल आईडी के लिए सदस्यों को चाहते हैं, तो आपको प्रत्येक मॉडल के लिए एक अलग सेट स्टोर करने की आवश्यकता हो सकती है, जिसका नाम 'resize_in_progress_3451' है, जहां 3451 मॉडल का आईडी है जिसमें छवियों का आकार बदल रहा है।

अधिक सेट कमांड के लिए http://redis.io/commands#set देखें।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^