HTTP कॉल करते समय रूबी में लगातार सिस्टम एक्सिटिट करें

मेरे पास रेल वेबसाइट पर रूबी है जो बाहरी वेब सेवा पर HTTP कॉल करता है।

दिन में लगभग एक बार मुझे सिस्टमएक्सिट (नीचे स्टैकट्रैक) त्रुटि ईमेल मिलता है जहां सेवा के लिए कॉल विफल हो गई है। यदि मैं फिर अपनी साइट के क्षणों पर सटीक वही क्वेरी आज़माता हूं तो यह ठीक काम करता है। यह तब से हो रहा है जब साइट लाइव हो गई थी और मुझे इसका कोई कारण नहीं था कि इसका कारण क्या है।

रूबी संस्करण 1.8.6 है और रेल संस्करण 1.2.6 है।

क्या किसी अन्य को यह समस्या है?

यह त्रुटि और stacktrace है।

एक सिस्टम एक्सीट हुआ   /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/fcgi_handler.rb:116:in   बाहर जाएं'   /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/fcgi_handler.rb:116:in   exit_now_handler '   /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/inflector.rb:250:in   to_proc '/usr/local/lib/ruby/1.8/net/protocol.rb:133:in कॉल'   /usr/local/lib/ruby/1.8/net/protocol.rb:133:in sysread '   /usr/local/lib/ruby/1.8/net/protocol.rb:133:in rbuf_fill '   /usr/local/lib/ruby/1.8/timeout.rb:56:in टाइमआउट '   /usr/local/lib/ruby/1.8/timeout.rb:76:in टाइमआउट '   /usr/local/lib/ruby/1.8/net/protocol.rb:132:in rbuf_fill '   /usr/local/lib/ruby/1.8/net/protocol.rb:116:in readuntil '   /usr/local/lib/ruby/1.8/net/protocol.rb:126:in readline '   /usr/local/lib/ruby/1.8/net/http.rbs017:in read_status_line '   /usr/local/lib/ruby/1.8/net/http.rbs006:in read_new '   /usr/local/lib/ruby/1.8/net/http.rb:1047: अनुरोध में '   /usr/local/lib/ruby/1.8/net/http.rb:945:in request_get '   /usr/local/lib/ruby/1.8/net/http.rb:380:in get_response '   /usr/local/lib/ruby/1.8/net/http.rboice43:in प्रारंभ करें '   /usr/local/lib/ruby/1.8/net/http.rb:379:in get_response '

0
जोड़ा संपादित
विचारों: 2

7 उत्तर

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

'सीरियल-ओवर-ब्लूटूथ बोर्ड' पर बारीकी से देखो, उनमें से कुछ वास्तव में विभिन्न प्रोफाइल का समर्थन करते हैं। जो आप खोज रहे हैं वह एक मॉड्यूल है जो ब्लूटूथ एचआईडी प्रोफाइल (मानव इंटरफेस डिवाइस, उर्फ ​​माउस, कीबोर्ड, जॉयस्टिक, वाईआई रिमोट इत्यादि) का समर्थन करता है।

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

11
जोड़ा
विशेष रूप से कौन सा पता लगाने के लिए: उनमें से प्रत्येक पर क्लिक करें, और पृष्ठ को पढ़ें और देखें कि क्या यह कहीं भी "छिपा" कहता है। फिर यदि आप जानना चाहते हैं कि यह कितना काम करेगा: मॉड्यूल के लिए डेटाशीट पढ़ें और देखें कि इसे आरंभ करने के लिए आपको कितना करना है, ईवेंट भेजना आदि। कई मॉड्यूल जिन्हें आप यूएआरटी के माध्यम से संवाद कर सकते हैं, जो आम तौर पर होता है एक माइक्रोक्रोनरोलर से बहुत सरल, "एटी" कमांड के साथ, पुराने दिनों में मॉडेम कैसे काम करता है। फिर डेटाशीट को उपलब्ध कमांड सूचीबद्ध करना चाहिए।
जोड़ा लेखक Marcel, स्रोत
ठीक। लेकिन कौन सा, विशेष रूप से, और उन्हें समर्थन देने के लिए कितना काम शामिल है?
जोड़ा लेखक Lehane, स्रोत
तो इस तरह? sparkfun.com/products/10253
जोड़ा लेखक Lehane, स्रोत

यह संभवतः वह समाधान नहीं है जिसे आप ढूंढ रहे हैं, लेकिन मैंने सोचा कि यह प्रश्न के लिए प्रासंगिक था:

https://serverfault.com/questions/ 43615/सेटअप एक लिनक्स कंप्यूटर-से-कार्य के रूप में एक-ब्लूटूथ कुंजीपटल माउस

2
जोड़ा

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

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

एक आदर्श मॉड्यूल (यदि ऐसी कोई चीज़ मौजूद है) बीएलई समर्थन के साथ एक ब्लूटूथ 4.1 मॉड्यूल होगा जो एक माइक्रोकंट्रोलर को HOGP (GATT प्रोटोकॉल पर छिपाएं) का खुलासा करता है। HOGP आपको यूएसबी एचआईडी रिपोर्ट डिस्क्रिप्टर का उपयोग करने देता है और "वायरलेस यूएसबी" होने के बहुत करीब आता है। दुर्भाग्यवश, बीटी 4.1/एचओजीपी समर्थन हाल ही में एंड्रॉइड और विंडोज 8 तक अंतर्निहित नहीं है। एक मॉड्यूल जो माइक्रोकंट्रोलर से बात करता है और इसे रिपोर्ट डिस्क्रिप्टर सेट करने देता है और फिर रिपोर्ट भेजना बहुत ही आसान काम होगा।

2
जोड़ा

रूबी के साथ fcgi का उपयोग बहुत छोटी गाड़ी के रूप में जाना जाता है।

व्यावहारिक रूप से सभी इस कारण से Mongrel में स्थानांतरित हो गए हैं, और मैं आपको ऐसा करने की सलाह देता हूं।

0
जोड़ा

मैं यात्री पर भी एक नज़र डालेगा। Apache / nginx + Mongrel के पारंपरिक समाधान से जाने के लिए यह बहुत आसान है।

0
जोड़ा

यह थोड़ी देर हो गया है क्योंकि मैंने एफसीजीआई का इस्तेमाल किया था, लेकिन मुझे लगता है कि अगर थ्रेड बहुत लंबा समय ले रहा था तो एक एफसीजीआई प्रक्रिया सिस्टमएक्सिट फेंक सकती है। यह वेब सेवा प्रतिक्रिया नहीं दे सकती है या यहां तक ​​कि एक धीमी DNS क्वेरी भी हो सकती है। कुछ Google परिणाम पाइथन और एफसीजीआई के साथ एक समान त्रुटि दिखाते हैं, इसलिए मोंगल पर जाने के लिए एक अच्छा विचार होगा। यह पोस्ट मेरा संदर्भ है जो मैं mongrel सेटअप करने के लिए प्रयोग किया जाता था और मैं अभी भी इसे वापस संदर्भित करता हूं।

0
जोड़ा

मैं Apache1 / fastcgi पर इन्हें हर समय प्राप्त करता था। मुझे लगता है कि रुबी होने से पहले फास्टसीगी लटक रही है।

मोंगेल पर स्विच करना एक अच्छा पहला कदम है, लेकिन ऐसा करने के लिए और कुछ है। लाइव पृष्ठों पर विशेष रूप से रेल से वेब सेवाओं से हटना एक बुरा विचार है। रेल थ्रेड-सुरक्षित नहीं है। समवर्ती कनेक्शन की संख्या जो आप समर्थन कर सकते हैं, आपके क्लस्टर में मोंग्रेल्स (या यात्री प्रक्रियाओं) की संख्या के बराबर होती है।

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

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

आपके ऐप की प्रकृति के आधार पर एक और विकल्प, क्रॉन के माध्यम से हर एन मिनट में सेवा को खींचना, डेटा को स्थानीय रूप से कैश करना है, और अपना लाइव पेज कैश से पढ़ना है।

0
जोड़ा