2009-07-21 14 views
5

रेल में क्रॉन समाधान असंख्य और बहुत अच्छे हैं। यही वह नहीं है जो मैं यहां से संघर्ष कर रहा हूं।रेल में पुनरावर्ती कार्यों को मॉडल और स्टोर कैसे करें?

इसके बजाए, मुझे जो परेशानी हो रही है, वह उपयोगकर्ताओं को अपने आवर्ती कार्यों (जैसे अनुस्मारक) बनाने दे रही है - विशेष रूप से डीबी में इन्हें मॉडल और स्टोर करने के लिए कैसे करें (इसके लिए एक अच्छा यूआई भी गैर-तुच्छ है - होगा भयानक अगर वहां के लिए कोड था)। Google कैलेंडर यहां एक महान उदाहरण है (एक ईवेंट जोड़ने के लिए यूआई, पूरे कैलेंडर नहीं) ... वे प्रतिदिन 1 बजे सीएसटी, या मोन/वेड/फ्राइड, या साप्ताहिक, आदि पर करने में सक्षम होना चाहिए। जो भी क्रॉन समाधान है उपयोग किए जाने के बाद डेटाबेस को मतदान करने की आवश्यकता होगी ताकि यह देखने के लिए कि कौन सा अनुस्मारक उस घंटे भेजा जाना चाहिए, आदि

किसी ने रेल में इस के लिए एक अच्छी प्लगइन/मणि देखी है? ऐसा लगता है कि इसके लिए कुछ बाहर होगा, लेकिन मुझे अभी तक यह नहीं मिला है।

धन्यवाद!

+0

मैं वही चीज़ ढूंढ रहा हूं! क्या आपको अपनी समस्या का समाधान मिला? – Zabba

+0

नीचे अपना स्वीकार्य उत्तर देखें - अपना खुद का सरल समाधान घुमाया –

उत्तर

5

मैंने अपना खुद का समाधान रोलिंग समाप्त कर दिया क्योंकि मुझे कुछ भी सुपर फैंसी की आवश्यकता नहीं थी।

मूल रूप से मैंने next_run डेटाटाइम और interval स्ट्रिंग कॉलम को डीबी में जोड़ा जो कि (दिन, सप्ताह, आदि) में से एक था। फिर चलाने के लिए क्रॉन जॉब सेट करें जो next_run पास की गई तिथियों को देखता है। यह उन्हें चलाता है और फिर interval कॉलम के आधार पर भविष्य में किसी बिंदु पर next_run सेट करता है।

सरल लेकिन मेरी आवश्यकताओं के लिए काम किया।

1

वर्तमान में इस तरह एक प्लगइन का उपयोग कर एक मेज http://github.com/fnando/recurrence/tree/master

प्रत्येक अनुस्मारक एक पुनरावर्तन वस्तु होता में पुनरावृत्ति स्टोर करने के लिए के बारे में सोच, और जब यह यह अगले एक है भेजने के लिए चाहिए था अनुस्मारक भी एक datetime क्षेत्र रखना होगा। तब क्रॉन ...

get all reminder's whose "next_send" date has passed 
for each reminder 
    send it 
    update the "next_send" field using the recurrence object 
end 

अगर कोई बेहतर समाधान या मैं गलत पथ नीचे जा रहा हूँ कर रहे हैं, इनपुट हमेशा सराहना कर सकते हैं।

1

मुझे हमेशा आवर्ती घटनाओं के साथ काम करने के लिए सबसे अच्छा तरीका होने के लिए ical (आरएफसी, प्रोग्राम नहीं) समाधान मिला है। Ical से निपटने के लिए कुछ अच्छे रूबी पुस्तकालय हैं, और ब्लॉक पर नवीनतम बच्चा ri_cal है।

+0

रैलिक शानदार और पूर्ण विशेषताओं को देखता है, मैं उलझन में हूं कि यह रेल के साथ कैसे एकीकृत हो सकता है। क्या यह डेटाबेस या घटनाओं को डेटाबेस में संग्रहीत करता है? आप पिछले घटनाओं को कैसे देख रहे हैं या प्रश्न पूछेंगे? धन्यवाद! –

+0

देख रहे हैं => देखो –

+1

दुर्भाग्य से शास्त्रीय दिखता है जो आपको डेटाबेस में कुछ भी सहेजने नहीं देता है .... यह केवल ical फ़ाइलों को पढ़ने/उत्पन्न करने के लिए है –

0

मैं वर्तमान में इस समस्या और समाधान है कि मैं विचार कर रहा हूँ इस प्रकार है हो रही है:

class AllowReoccuringTasks < ActiveRecord::Migration 
    def self.up 
     add_column :tasks, :reoccuring, :boolean 
     add_column :tasks, :period, :integer 
    end 
end 

जहां अवधि हो सकता है या तो 1 (हर दिन), 7 (हर हफ्ते), या 14 (हर दूसरे सप्ताह)।

यदि आप हर महीने, सप्ताहांत, सप्ताहांत इत्यादि जैसे अन्य प्रकार के शेड्यूल का समर्थन करना चाहते हैं, तो आप इसके बजाय "शेड्यूल" नामक कॉलम जोड़ सकते हैं और विभिन्न शेड्यूल प्रकारों का प्रतिनिधित्व करने के लिए स्थिरांक का उपयोग कर सकते हैं। आप enum plugin का भी उपयोग कर सकते हैं।

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