2010-01-17 8 views
16

मैं वर्तमान में एक ऐसा एप्लिकेशन लिख रहा हूं जो आरएसएस स्रोतों से नई जानकारी खींचता है और उन आरएसएस स्रोतों को एक निश्चित आवृत्ति में अद्यतन करना है। वर्तमान में मैं केवल तभी खींच रहा हूं जब उपयोगकर्ता फ़ीड का अनुरोध करता है लेकिन मैं उस व्यवहार को स्वचालित आवधिक fetching में बदलना चाहता हूं।एक रूबी ऑन रेल अनुप्रयोग में आवर्ती कार्य: क्रॉन या अन्य?

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

उत्तर

19

मैं रेक कार्य चलाने के लिए अपने क्रॉन नौकरी उत्पन्न करने के लिए रेक रेक कार्य की तरह कुछ करने और whenever gem का उपयोग करने का सुझाव दूंगा।

जब भी मणि के बारे में अधिक जानकारी के लिए, http://railscasts.com/episodes/164-cron-in-ruby देखें।

whenever gem का मुख्य लाभ यह है कि यह अपने आवेदन के अंदर (आवेदन में अर्थात क्रॉन जॉब हर एक्स घंटे चल रहा है,) अपने आवेदन की आवश्यकताओं को रहता है, आपके आवेदन के पोर्टेबिलिटी बढ़ रही है।

1

कई प्रकार के समाधान हैं। सबसे सरल सेटअप के लिए, यदि आप ऐसा तरह अपने crontab कुछ में script/runner उपयोग कर सकते हैं:

10 0 * * * /home/myuser/myproject/script/runner -e production ModelName.methodname 

methodName अपने मॉडल पर एक स्थिर विधि होना चाहिए। आपको परियोजना को पूर्ण पथ से संदर्भित करने की आवश्यकता है, अन्यथा यह क्रॉन पर्यावरण में सबसे अधिक संभावना नहीं मिलेगी। यदि आप परिचित नहीं हैं तो क्रॉन्टाब सिंटैक्स पर जानकारी के लिए अपने crontab मैन पेज को देखें। उपरोक्त, उदाहरण के लिए, प्रत्येक दिन के 0 वें घंटे (12:10 बजे, संक्षेप में) के 10 वें मिनट में स्क्रिप्ट चलाता है।

यदि आपको अधिक शक्तिशाली समाधान की आवश्यकता है, तो आप BackgroundRB का उपयोग कर सकते हैं। BackgroundRB एक डिमन चलाता है और शेड्यूल करने वाले कार्यों का समर्थन करता है, और परिणाम डेटाबेस में डाल सकता है। आपके वेब प्रक्रियाओं को कार्य पूरा करने के लिए अनुमति देने के लिए उनके पास एक सरल संचार प्रोटोकॉल भी है, और फिर परिणाम पुनर्प्राप्त करने का एक तरीका है। यह आपको क्रॉसबैब की बजाय वेब इंटरफेस से सीधे पृष्ठभूमि नौकरियों को नियंत्रित करने की अनुमति देता है जो कि "होता है"।

बैकराउंडआरबी के लिए काम करने के लिए एक और अधिक सेटअप की आवश्यकता है, लेकिन अगर नौकरियों को नियंत्रित करने की आवश्यकता हो तो यह इसके लायक हो सकता है।

6

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

जब भी प्लगइन शांत लगता है, हालांकि मैं इसके लिए झुकाव नहीं कर सकता। बेशक, यह जानना अच्छा है कि स्क्रैच से चीजें कैसे करें, फिर अपने जीवन को आसान बनाने के लिए प्लगइन का उपयोग करें। यहां से स्क्रैच रास्ता है।

एक नई फ़ाइल बनाएं, lib/tasks/admin.rake

के अंदर, कार्य ही बनाएँ:

namespace :admin 
    desc "Updates all RSS feeds" 
    task :rss => :environment do 
    RssFeed.update_all 
    end 
end 

इसका मतलब यह है कि आप एक RssFeed वर्ग है, और update_all विधि आपकी आशा करता है।आप कमांड लाइन से इस कॉल कर सकते हैं:

rake admin:rss 

और तुम और इस लाइन को जोड़ने (crontab -l वेब उपयोगकर्ता के रूप में फोन करके) इस क्रॉन करने के लिए जोड़ सकते हैं:

10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss 
+1

आप मैन्युअल रूप से काम करने के लिए कैसे जानने में एक अच्छा बिंदु बनाने के। हालांकि जब भी मणि का मुख्य लाभ, जैसा कि मैंने ऊपर की ओर इशारा किया, है न केवल डीएसएल इसे इस्तेमाल करता है की वजह से, एक क्रॉन जॉब क्लीनर लिखने की वाक्य रचना है, लेकिन यह आपको लगता है कि व्यापार आवश्यकता रखने के लिए अनुमति देता है (क्रॉन जॉब), अपने आवेदन के साथ संस्करण नियंत्रण में, इस तरह जब समय पैमाने की बात आती है, तो आप क्रॉन टैब के माध्यम से, क्रॉन टैब को कॉपी, अपने अनुप्रयोग से संबंधित नहीं अन्य क्रॉन नौकरियों को छान, रास्तों को बदलने शिकार जाने के लिए नहीं है, आदि आप केवल मणि के साथ crontab में जोड़ उत्पन्न कर सकते हैं। – Travis

+0

मैं पूरी तरह से सहमत हूं, और मैं निश्चित रूप से उस मणि की जांच करूँगा! आप सही हैं, अनुमानित crons * संस्करण नियंत्रण में शामिल अनुप्रयोग का एक हिस्सा होना चाहिए, आदि। मैंने सोचा कि मैं नींव का थोड़ा सा योगदान दूंगा। –

1

whenever का उपयोग करें। अंत में घटनाक्रम यह एक क्रॉन तैयार करेगा, लेकिन रूबी डीएसएल का उपयोग करके शेड्यूलिंग परिभाषा आपके आवेदन के अंदर लिखी जाएगी।

0
छोटे दलों और निजी परियोजनाओं के लिए

, जब भी मणि महान है। लेकिन अगर आपकी कंपनी के पास विकास टीम से अलग एक ओप टीम है, तो यह आदर्श नहीं हो सकता है।

मेरा आखिरी काम में ऑप्स टीम क्रॉन को देखने के लिए हम इतना स्थापित करने थे वे आश्वस्त यह प्रणाली के लिए कोई दुष्प्रभाव नहीं होता हो सकता है सक्षम होने के लिए की जरूरत है। तो एक डीएसएल समाधान काम नहीं करेगा। लेकिन हम (डेवलपर्स) संस्करण नियंत्रण में क्रॉन स्क्रिप्ट चाहते थे।

तो समझौता करने के लिए, हम कच्चे क्रॉन, इस के समान के साथ पाठ फ़ाइलों की जाँच की:

10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss 

और हम Capistrano स्क्रिप्ट स्थापित crontab के लिए तैनाती के हिस्से के रूप में एक कदम जोड़ा। अपने सर्वर में

+1

जब भी आपके रेल आवेदन में टाइपिंग होता है तो यह क्रॉन नौकरियों को आउटपुट करता है। क्या आप ओप टीम के लिए सिर्फ फाइलों को फाइल में आउटपुट नहीं कर पाए? – ericraio

0

कोशिश Webmin सेटअप। यदि आपकी होस्ट की गई साइट इसे प्रदान करती है। नीचे उल्लिखित यूआरएल पर जाएं। इसे स्थापित करना और उपयोगकर्ता को आसानी से स्थापित करना आसान है।

यूआरएल है:

http://your_ip_address:10000/ 

मैं अपने आवेदन के कई यह काम किया है इस का इस्तेमाल किया है मुझे क्रॉन नौकरियों शेड्यूल करने के लिए।

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