2016-06-24 11 views
13

के साथ मेरे पास नोडजेएस, मोंगोडीबी (ड्राइवर के रूप में मोंगोस) और एक्सप्रेसजेएस का उपयोग करके एक पूर्ण वेब एप्लिकेशन है।Google ऐप इंजन 502 (खराब गेटवे) नोडजेएस

परियोजना मेरी स्थानीय मशीन पर पूरी तरह से काम करती है। आज मैंने सब कुछ उत्पादन में ले जाने का फैसला किया। मैं अपने एप्लिकेशन को होस्ट करने के लिए Google App Engine का उपयोग कर रहा हूं, और अपने डेटाबेस को होस्ट करने के लिए (औपचारिक रूप से MongoHQ) लिखें।

ऐप इंजन मेरे एप्लिकेशन को पूरी तरह से सर्वर करता है, हालांकि मेरा एपीआई काम नहीं कर रहा है। मेरा एपीआई example.com/api से परोसा जाता है, और प्रत्येक अनुरोध (GET, POST, DELETE और PUT) सभी 502 (खराब गेटवे) त्रुटि लौटाते हैं।

मैंने अपने रिमोट मोंगोडीबी डेटाबेस से कनेक्ट होने पर अपने स्थानीय मशीन पर अपना एप्लिकेशन चलाने की कोशिश की और यह पूरी तरह से ठीक काम किया। तो यह ऐप्प इंजन या नोडजेएस के साथ एक समस्या होनी चाहिए, मोंगोडीबी के साथ नहीं।

मैंने Google क्लाउड के भीतर सभी त्रुटि लॉग जांचने का प्रयास किया है, हालांकि इसमें कोई त्रुटि नहीं है।

ऐप इंजन/नोडजेएस मेरे एप्लिकेशन की स्थिर सामग्री को पूरी तरह से ठीक क्यों कर रहा है, हालांकि मेरे एपीआई को कोई अनुरोध नहीं दे रहा है?

उत्तर

10

502 खराब गेटवे आमतौर पर Nginx पक्ष पर एक त्रुटि है। दुर्भाग्यवश उन लॉग क्लाउड लॉगिंग में नहीं आये हैं, फिर भी।

कई बार समस्या यह है कि आपके HTTP पैकेट बफर या कुछ समान के लिए बहुत बड़े हैं। जिस तरह से आप nginx लॉग देख सकते हैं वह इस तरह है:

  • केवल 1 वीएम का उपयोग करें। यह कड़ाई से जरूरी नहीं है, लेकिन कई बार यह आपके आवेदन को डीबग करना आसान बनाता है यदि आप जानते हैं कि एक मशीन पर आपके अनुरोध हैं। आप अपने app.yaml को यह जोड़कर यह पूरा कर सकते हैं:

manual_scaling: instances: 1 तो फिर से तैनात

  • स्विच आत्म प्रबंधित करने के लिए वीएम से "गूगल के स्वामित्व वाली"। यह क्लाउड कंसोल में किया जा सकता है। कंप्यूट इंजन पर जाएं, उदाहरण, ऐप इंजन संस्करण से मेल खाने वाले इंस्टेंस नाम पर क्लिक करें, और आपको इसे स्व-प्रबंधित करने के लिए स्विच करने का विकल्प देखना चाहिए।

  • gcloud compute ssh <instance name> मशीन

  • docker ps से ssh को अपने चल रहे कंटेनर को देखने के लिए। Nginx नामक कंटेनर की तलाश करें और इसकी आईडी पकड़ो।

  • एक बार आपके पास कंटेनर आईडी हो जाने के बाद, आपको docker exec -it <container id> -- cat /var/log/nginx/error.log पर सक्षम होना चाहिए। आप ls को पूरी लॉग निर्देशिका चाहते हैं।

आपको शायद एक त्रुटि दिखाई देगी जो गलत हो रहा है के बारे में एक बड़ा संकेत होगा।

मुझे पता है कि यह इस तरह से अधिक जटिल होना चाहिए: - \ अगर आपको ऊपर दिए गए चरणों के साथ कोई समस्या है, तो एक टिप्पणी छोड़ दें। अगर आपको कोई त्रुटि मिलती है और आपको यकीन नहीं है कि इसके साथ क्या करना है, तो एक टिप्पणी भी छोड़ दें।

+0

खैर यहाँ एक नाटकीय मोड़ है 8080 बंदरगाह पर करें कि आपका सर्वर सुनता है बनाते हैं। बस 'manual_scaling जोड़ना: उदाहरण: 5' मेरी 'app.yaml' फ़ाइल में और इसे तैनात करने से पूरी समस्या ठीक हो गई। कोई विचार क्यों होगा? – Fizzix

+0

हालांकि, छवि अपलोडिंग जैसे मेरे अधिक उन्नत एपीआई तक पहुंचने का प्रयास करते समय, यह अभी भी विफल रहता है। ऐसा शायद इसलिए है क्योंकि मैं अपने एपीआई में एक बड़ी बेस 64 स्ट्रिंग भेज रहा हूं। क्या मेरे सर्वर एपीआई में कितना डेटा भेजा जा सकता है, यह बढ़ाने का कोई तरीका है? – Fizzix

+0

वाह, बस एहसास हुआ कि मेरा मतलब मैन्युअल_स्कलिंग था: उदाहरण 1 पर सेट, 5 नहीं! इस तरह आप निश्चित रूप से जानते हैं कि आप किस अनुरोध पर देख रहे हैं। यह देखने के लिए कि क्या आप त्रुटि लॉग नहीं पा रहे हैं, मैं अभी भी उन सभी चरणों का पालन करूंगा। वैसे भी, यदि आपके पैकेट बफर के लिए बहुत बड़े हैं, तो सीधे बढ़ने का कोई तरीका नहीं है, इसलिए आपकी सर्वश्रेष्ठ शर्त यह पता लगाने के लिए है कि डेटा को तोड़ने के लिए आपको कितने डेटा को ट्रांसफर करना है। –

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