2011-05-22 9 views
5

मैं पृष्ठभूमि की प्रक्रिया को संसाधित करने के लिए Redis के साथ Resque का उपयोग कर रहा हूं। मैं पृष्ठभूमि कार्य करने के लिए हर घंटे केवल एक बार, Resque.enqueue (MyModel) को कॉल करना चाहता हूं।रेल में हर घंटे आप एक विधि कैसे कॉल करते हैं?

उदाहरण के लिए: कहें कि मेरे पास ऐसी साइट है जिसमें 10,000 उपयोगकर्ता हैं। मैं इस विधि को केवल 24 बार प्रति दिन कॉल करना चाहता हूं; 10,000 * 24 नहीं। उदाहरण विधि नीचे है:

Resque.enqueue(MyModel) 

अग्रिम में आपकी सहायता के लिए धन्यवाद। मुझे यह भी जिक्र करना चाहिए कि मैं रेस्क के साथ रहना पसंद करता हूं, और विलंबित नौकरी में नहीं जाता हूं। धन्यवाद।

+0

लूप के दौरान असीमित, पहले कॉल विधि 3600 सेकंड सोएं? –

+0

आप कैसे हिम्मत करेंगे :) इसके लिए समर्पित उपकरण हैं! – apneadiving

+0

@apneadiving tbh, इस तरह के एक साधारण मामले में (विशेष रूप से जहां आपको किसी ऑब्जेक्ट तक पहुंच की आवश्यकता होती है), मैं ऐसा करने की अपेक्षा करता हूं क्योंकि मैं एक क्रॉन नौकरी स्थापित करना चाहता हूं। –

उत्तर

5

आपको इस तरह के कार्य के लिए एक क्रॉन नौकरी का उपयोग करना चाहिए।

मेरा सुझाव है कि आप जब भी मणि का उपयोग करें।

railscast यहाँ देखें: resque-scheduler: http://railscasts.com/episodes/164-cron-in-ruby

+0

मैं रेलवेस्ट # 164 देख रहा हूं और जब भी मणि अच्छा दिखता है। क्या आपके पास इस मणि के साथ बहुत अच्छा अनुभव है? मुझे किसी भी नकारात्मक पर विचार करना चाहिए? –

+0

नहीं, यह बहुत अच्छा है और आपको उचित अवधि के साथ जो कुछ भी चाहिए, उसे निर्धारित करने दें – apneadiving

+0

क्रॉन नौकरियां रेल विशिष्ट नहीं हैं। उनका उपयोग रखरखाव आदि के लिए किया जाता है ... – apneadiving

3

के बाद से आप पहले से ही Resque उपयोग कर रहे हैं, मैं कई उपलब्ध Resque प्लगइन्स से एक का उपयोग करने के लिए सिफारिश करेंगे। Resque UI में बहुत अच्छी तरह से प्लग करता है। रीडमे में समझाया गया सरल सेटअप। इसमें कई गुमशुदा विलंबित जॉब सामान भी शामिल हैं (निष्पादन में देरी हुई)। एप्लिकेशन-फ़ोल्डर में

  • रहता है और अपने क्रॉन फ़ाइल के साथ गड़बड़ नहीं करता है:

    मैं क्यों resque-scheduler करने के लिए whenever से बदल।

  • सभी 'crons' को रोकने के लिए बस Resque श्रमिकों को अक्षम करें।
  • Resque UI पर अपवाद लॉग हैं।
  • Resque UI के माध्यम से मैन्युअल रीशेड्यूलिंग संभव है।
  • resque-loner के साथ संयोजन में आप डबल निष्पादन को रोकते हैं, नौकरी को दो निष्पादन के बीच की अवधि से अधिक समय लेना चाहिए।
  • अभी भी Resque की प्राथमिकता प्रणाली का पालन करता है।
  • कोई अतिरिक्त बूट-टाइम (60% तक का समय लग सकता है यदि आपका ऐप बड़ा हो) क्योंकि यह रेस्क के कार्यकर्ता-पूल का उपयोग करता है।
  • एक कम "तकनीक" का इस्तेमाल किया जाता है।
  • सरल स्विच: कॉन्फ़िगरेशन क्रॉन-जैसी तरीके से किया जाता है।
+0

+1 क्योंकि ऐसा लगता है कि यह प्रत्येक 5 मिनट आदि में रेक परीक्षण चलाने के पर्यावरण स्टार्टअप समय को नहीं लेगा। यह हमारे लिए बड़ी जीत है, जिसमें बहुत सारे पृष्ठभूमि कार्य हैं। – d11wtq

0

आप आसानी से Whenever का उपयोग कर सकते हैं जो वास्तव में आपने जो पूछा है और बहुत कुछ है, इसमें एक बहुत अच्छा प्रलेखन है।

आप इस तरह कुछ वाक्य विन्यास का उपयोग कर सकते हैं:

every 3.hours do 
    runner "MyModel.some_process" 
    rake "my:rake:task" 
    command "/usr/bin/my_great_command" 
end 

का उपयोग कर इसे स्थापित:

$ gem install whenever 

या अपने GemFile में जोड़ें:

gem 'whenever', :require => false 

तो चलाएँ:

$ cd /apps/my-great-project 
$ wheneverize . 

उम्मीद है कि यह आपकी मदद करता है!

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