2011-12-28 4 views
9

पर हमेशा के लिए नोड.जेएस, इसलिए, मुझे अपने नोड.जेएस ऐप को उसकेोकू पर चलाने की ज़रूरत है, यह बहुत अच्छी तरह से काम करता है, लेकिन जब मेरा ऐप दुर्घटनाग्रस्त हो जाता है, तो मुझे इसे पुनरारंभ करने के लिए कुछ चाहिए, इसलिए मैंने हमेशा पैकेज.जेसन में जोड़ानोडोक

var forever = require('forever'); 

var child = new (forever.Monitor)('web.js', { 
    max: 3, 
    silent: false, 
    options: [] 
}); 

//child.on('exit', this.callback); 
child.start(); 

forever.startServer(child); 

मेरी Procfile पर मैं डाल (Heroku क्या शुरू करने के लिए पता करने के लिए उपयोग करता है):

web: node forever.js 

ठीक है, और एक फ़ाइल का नाम forever.js इस के साथ बनाया! अब हर मेरे ऐप यह ऑटो पुनरारंभ समय (लगभग हर 1 घंटे) करने के लिए दुर्घटनाओं है, लेकिन समय से,, Heroku फेंकने H99 शुरू होता है - मंच त्रुटि है, और इस त्रुटि के बारे, वे कहते हैं:

अन्य त्रुटियों के सभी के विपरीत जिसके लिए आपको सही करने के लिए कार्रवाई की आवश्यकता होगी, इस से आपको किसी से कार्रवाई की आवश्यकता नहीं है। एक मिनट में पुनः प्रयास करें, या स्थिति साइट की जांच करें।

लेकिन मैं मैन्युअल रूप से मैन्युअल रूप से अपने ऐप को पुनरारंभ करता हूं और त्रुटि दूर हो जाती है, अगर मैं ऐसा नहीं करता हूं, तो इसे दूर जाने में कई घंटे लग सकते हैं।

क्या कोई मेरी मदद कर सकता है? शायद यह हमेशा के लिए एक समस्या है? एक Heroku मुद्दा?

+0

क्या आपको समझने के लिए क्या कारण है? – pars

+1

नहीं, लेकिन मैंने हमेशा के लिए हटा दिया, इसकी जरूरी ज़रूरत नहीं है, आपको त्रुटियों से बचना चाहिए ताकि आपका ऐप –

+2

चलाना जारी रखे, तो क्या यह अबोकू स्वचालित रूप से आपके ऐप को फिर से शुरू कर देता है? – hellatan

उत्तर

8

यह मुफ्त हेरोोक खातों के साथ एक मुद्दा है: हरोकू स्वचालित रूप से 1 घंटे की निष्क्रियता के बाद अवैतनिक ऐप्स को मारता है, और फिर अगली बार अनुरोध आने पर उन्हें वापस चलाता है। (जैसा कि नीचे बताया गया है, यह भुगतान खातों पर लागू नहीं होता है यदि आप दो सर्वर तक स्केल करते हैं और दूसरे के लिए भुगतान करते हैं, तो आपको दो हमेशा सर्वर मिलते हैं।) - https://devcenter.heroku.com/articles/dynos#dyno-sleeping

यह व्यवहार शायद forever के साथ अच्छी तरह से खेल नहीं रहा है। इसकी पुष्टि करने के लिए, heroku logs चलाएं और "Idling" और "SIGTERM के साथ रोक प्रक्रिया" की रेखाएं देखें और फिर देखें कि अगला क्या आता है।

forever का उपयोग करने के बजाय, आप क्लस्टर एपीआई का उपयोग करने की कोशिश कर सकते हैं और हर बार जब कोई मर जाता है तो एक नया बच्चा बना सकता है। http://nodejs.org/api/cluster.html#cluster_cluster एक अच्छा उदाहरण है, आप बस अपना कोड else ब्लॉक में डाल देंगे।

उपरोक्त यह है कि आपका ऐप अब और अधिक स्थिर है, और यह सभी उपलब्ध CPU कोर (मेरे अनुभव में 4) का उपयोग करने के लिए मिलता है।

नकारात्मकता यह है कि आप स्मृति में किसी भी राज्य को स्टोर नहीं कर सकते हैं। यदि आपको उन पंक्तियों के साथ सत्र या कुछ स्टोर करने की आवश्यकता है, तो मुफ्त रेडिस टू गो एडन (heroku addons:add redistogo) आज़माएं।

यहाँ एक उदाहरण है कि वर्तमान में cluster और Redis का उपयोग कर गो Heroku पर चल रहा है: https://github.com/nfriedly/node-unblocker

अद्यतन: Heroku हाल ही में कैसे मुक्त क्षुधा काम करने के लिए कुछ बड़े परिवर्तन किए है, और बड़ी वे केवल के लिए ऑनलाइन किया जा सकता है प्रति दिन अधिकतम 18 घंटे, इसे "असली" वेब सर्वर के रूप में प्रभावी ढंग से उपयोग करने योग्य बनाते हैं। https://blog.heroku.com/archives/2015/5/7/heroku-free-dynos

अद्यतन 2: उन्होंने इसे फिर से बदल दिया। अब, यदि आप अपनी आईडी सत्यापित करते हैं, तो आप लगातार 1 फ्री डिनो चला सकते हैं: https://blog.heroku.com/announcing_heroku_free_ssl_beta_and_flexible_dyno_hours#flexible-free-dyno-hours

+1

आप सही Heroku करता है कि कर रहे हैं, केवल के लिए मुफ्त एकल dyno हालांकि एप्लिकेशन। भुगतान किए गए स्तर हमेशा बने रहते हैं। –

+2

इसके अलावा, कार्यकर्ता प्रक्रियाओं खड़ी कभी नहीं कर रहे हैं – kgilpin

+1

आप निगरानी सेवा है जो अपने सर्वर हमेशा के लिए पिंग रखेंगे और इस तरह यह aliveeee –

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

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