यह काम करने की कोशिश कर रहे एक डेस्क के खिलाफ मेरे सिर को मारना। मैं Google App Engine के माध्यम से gunicorn पर एक साधारण कुप्पी ऐप को तैनात करने का प्रयास कर रहा हूं। ऐप पर जाने पर, मुझे त्रुटि 500 ​​मिल रही है, जिसमें "गनिकॉर्न: त्रुटि: कोई एप्लिकेशन मॉड्यूल निर्दिष्ट नहीं है।" लॉग्स में।

मेरा लेआउट मोटे तौर पर है:

Main_Directory/
|-MyApp/
|   |-__init__.py <- Containing majority of code
|   |-templates/
|   |-static/
|-app.yaml
|-main.py 
|-requirements.txt

main.py केवल MyApp से ऐप को इंपोर्ट करता है और "ऐप" नामक एक नए इंस्टेंस को इंस्टेंट करता है।

requirements.txt में गनिकोर्न सहित सभी निर्भरताएं हैं।

App.yaml बिल्कुल इस प्रकार है:

runtime: python37
instance_class: F1
default_expiration: "4d 12h"
entrypoint: gunicorn -b :$PORT -w 1

env_variables:
  BUCKET_NAME: "bucket_name"

handlers:
- url: /.*
  script: auto

मैंने MyApp फ़ोल्डर में एक और app.yaml बनाने और सेवा जोड़ने की कोशिश की: "डिफ़ॉल्ट" लेकिन इससे कोई फायदा नहीं हुआ। मैं यहाँ विचारों से काफी बाहर हूँ। मुझे पूरा यकीन है कि समस्या इसलिए है क्योंकि मुख्य ऐप कोड MyApp में परिभाषित किया गया है, न कि सीधे Main_directory के तहत। मैं इस बात की सराहना करता हूं कि MyApp फ़ोल्डर से सब कुछ एक स्तर तक लाने के लिए आसान समाधान होगा, लेकिन मैं ऐसा करने में झिझक रहा हूं क्योंकि यह मेरे गिट के साथ गड़बड़ करेगा। मैंने सोचा था कि main.py बनाना और सीधे MyApp/__init__.py को इंस्टेंट करना ट्रिक करेगा, लेकिन ऐसा प्रतीत नहीं होता है।

किसी भी और सभी विचारों की सराहना की।

1
DevOpsIsNotForMe 13 मई 2020, 18:18

2 जवाब

सबसे बढ़िया उत्तर

जैसा कि अक्सर होता है, अपनी सीमा तक पहुँचने और एक प्रश्न उठाने के बाद, मुझे एक उत्तर मिल गया...

मैंने app.yaml से प्रवेश बिंदु हटा दिया और requirements.txt से गनिकोर्न हटा दिया। ऐप को फिर से तैनात करने पर, यह अब काम करता है।

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

0
DevOpsIsNotForMe 13 मई 2020, 18:41
हाँ, आपको अपनी app.yaml फ़ाइल के प्रवेश बिंदु में त्रुटि हुई थी। इसे हटाने से डिफ़ॉल्ट एंट्रीपॉइंट पर वापस आ जाता है जो ज्यादातर मामलों में काम करता है।
 – 
gaefan
14 मई 2020, 01:45
मेरे लिए वही समस्या। कोई समाधान नहीं: जब भी मैं फ्लास्क और पायथन 3 के साथ प्रवेश बिंदु निर्दिष्ट करने का प्रयास करता हूं, तो मुझे वही त्रुटि मिलती है। केवल जब मैं एंट्रीपॉइंट को पूरी तरह से हटा देता हूं और अपनी पहली फाइल को main.py नाम देता हूं, तो यह काम करता है।
 – 
Christian Petersen
14 नवम्बर 2020, 17:02

यदि आप अपने HTTP सर्वर के रूप में gunicorn का उपयोग करना चाहते हैं, तो आपको यह बताना होगा कि आपका WSGI ऐप कहाँ स्थित है। यह आपकी main.py फ़ाइल में एक app चर होने की संभावना है, इसलिए आप इसका उपयोग कर सकते हैं:

entrypoint: gunicorn -b :$PORT -w 1 main:app
0
Dustin Ingram 13 मई 2020, 19:40