2013-02-11 12 views
6

मेरे पास रेल अनुप्रयोग के लिए एन डिनोस है, और मैं उन सभी पर एक कमांड चलाने के लिए चाहता हूं। क्या इसे करने का कोई तरीका है? सभी dynos पर rails r "SomeRubyCode" निष्पादित किया जाएगा?क्या सभी हेरोकू डायनोस पर कमांड चलाने का कोई तरीका है?

मैं एक प्लगइन का उपयोग कर रहा हूं जो हर एम मिनट में तीसरे पक्ष के साथ समन्वयित करता है। समस्या यह है कि, कभी-कभी तृतीय पक्ष सेवा का समय समाप्त हो जाता है, और मैं इसे फिर से चलाने के लिए एक और एम मिनट के लिए इंतजार किए बिना इसे चलाने के लिए चाहता हूं।

+1

आपके उपयोग के मामले का विवरण यहां सबसे उपयोगी होगा। – hgmnz

+0

मैं एक प्लगइन का उपयोग कर रहा हूं जो हर एन मिनट में तीसरे पक्ष के साथ समन्वयित करता है। समस्या यह है कि, कभी-कभी, तृतीय पक्ष सेवा का समय समाप्त हो जाता है, और मैं इसे फिर से चलाने के लिए चाहता हूं, बिना किसी अन्य एन मिनट के इंतजार किए। – Geo

+1

रीडिस को साझा/वितरित स्मृति के रूप में उपयोग करने के बारे में, कहें, आपके आवेदन स्तर पर, प्लगइन स्तर पर नहीं)? परिणामों को कैश में सिंक और स्टोर करने के लिए प्लगइन शेड्यूल 'बल' प्लगइन रखें, फिर अपना शेष ऐप कैश से डेटा प्राप्त करें। यदि सिंक विफल हो जाता है, तो आप बिना किसी डिनो के चलने के बारे में चिंता किए बिना रेक कार्य को मैन्युअल रूप से चला सकते हैं। –

उत्तर

9

नहीं। आदेशों में से एक (heroku run bash जैसे) एक दूसरे, एक-ऑफ डिनो पर दौड़ रहे हैं। आपको किसी प्रकार की पबब/संदेश कतार स्थापित करने की आवश्यकता होगी कि सभी dynos इसे पूरा करने के लिए सुनो। https://devcenter.heroku.com/articles/one-off-dynos

4

(एक जवाब में मेरी टिप्पणी चालू करने के लिए पूछे जाने पर ... व्याख्या करने का अवसर ले जाएगा।)

मैं अपने प्लगइन एक के लिए 'सिंक' क्या करने की जरूरत के विवरण के बारे पता नहीं है तृतीय पक्ष सेवा, लेकिन मैं इस धारणा के साथ आगे बढ़ने जा रहा हूं कि प्लगइन मूल रूप से कुछ क्षणिक डेटा प्राप्त करता है जिसे आपका वेब एप्लिकेशन किसी भी तरह उपयोग करता है।

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

मैं पिछले एक, समान स्थिति में क्या किया है (एक बाहरी सेवा से एनालिटिक्स प्राप्त करने में कठिनाई) सरल है:

  1. प्रावधान और Redis
  2. के साथ अपने Heroku ऐप्लिकेशन कॉन्फ़िगर एक रेक कार्य कि बस कार्यान्वित लिखें डेटा लाने के लिए कोड (जो अन्यथा प्लगइन द्वारा चलाया जाएगा), फिर उस डेटा को कैश
  3. पर लिखें जहां आप आम तौर पर ऐप में डेटा लाएंगे, पहले कैश से लाने की कोशिश करें (और कैश मिस पर, बस एक ही कोड को दोबारा चलाएं-बस इसका मतलब है कि डेटा को रीफ्रेश करने से पहले कैश से समाप्त हो गया था)

मैं तो आगे ले गया और Heroku सरल अनुसूचक इस्तेमाल किया डेटा ताजा अपडेट किया है और हमेशा कैश में (कैश समाप्ति एक छोटे से कम से कम n करने के लिए स्थापित किया गया था रखने के लिए प्रयास करने के लिए कहा रेक कार्य हर n मिनट निष्पादित करने के लिए मिनट) और डेटा लाने के रूप में समझने योग्य अंतराल के उदाहरणों को कम करें। मैं कभी या एन से अधिक कैश की समाप्ति सेट कर सकता था लेकिन यह मिशन-महत्वपूर्ण नहीं था।

इस तरह, अगर मैं सुनिश्चित करना है कि नवीनतम एनेलिटिक्स प्रदर्शित किए गए चाहता था, सब मुझे क्या करना था या तो एक) Redis से कनेक्ट और कैश, या से आइटम निकाल (आसान), ख) सिर्फ heroku run rake task

फिर से यह मुख्य रूप से काम करता है यदि आप केवल डेटा खींच रहे हैं जिसे सभी डायनोस के बीच साझा करने की आवश्यकता है।

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

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

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