यह काम करने की कोशिश कर रहे एक डेस्क के खिलाफ मेरे सिर को मारना। मैं 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
को इंस्टेंट करना ट्रिक करेगा, लेकिन ऐसा प्रतीत नहीं होता है।
किसी भी और सभी विचारों की सराहना की।
2 जवाब
जैसा कि अक्सर होता है, अपनी सीमा तक पहुँचने और एक प्रश्न उठाने के बाद, मुझे एक उत्तर मिल गया...
मैंने app.yaml
से प्रवेश बिंदु हटा दिया और requirements.txt
से गनिकोर्न हटा दिया। ऐप को फिर से तैनात करने पर, यह अब काम करता है।
मुझे नहीं लगता कि यह एक फिक्स है, इतना ही एक वर्कअराउंड है। मुझे अभी भी यकीन नहीं है कि यह पहले क्यों काम नहीं करता था। ऐसे बेहतर समाधान होने चाहिए जो आवश्यकता के रूप में गनिकोर्न बनाए रखें। मुझे उम्मीद है कि यह यमल था जो गलत था।
यदि आप अपने HTTP सर्वर के रूप में gunicorn का उपयोग करना चाहते हैं, तो आपको यह बताना होगा कि आपका WSGI ऐप कहाँ स्थित है। यह आपकी main.py
फ़ाइल में एक app
चर होने की संभावना है, इसलिए आप इसका उपयोग कर सकते हैं:
entrypoint: gunicorn -b :$PORT -w 1 main:app
नए सवाल
python-3.x
पायथन प्रोग्रामिंग के बारे में प्रश्नों के लिए जो भाषा के संस्करण 3+ के लिए विशिष्ट हैं। सभी पायथन सवालों पर अधिक जेनेरिक [अजगर] टैग का उपयोग करें, और केवल यह जोड़ें यदि आपका प्रश्न संस्करण-विशिष्ट है। पायथन 2 प्रश्नों के लिए [अजगर -2] टैग का उपयोग करें।