2014-06-22 17 views
5

मैं एक Google ऐप इंजन प्रोजेक्ट बनाने की कोशिश कर रहा हूं जिसमें विभिन्न मॉड्यूल शामिल हैं, प्रत्येक में विभिन्न संस्करण हैं; फिर भी मैं इसे काम नहीं कर सकता।Google App Engine में एकाधिक मॉड्यूल के कई संस्करणों को सही तरीके से कार्यान्वित कैसे करें?

मैं google modules guide website पर सब कुछ के माध्यम से चला गया लेकिन आवेदन के पदानुक्रम का उनका विवरण बहुत अस्पष्ट है। मैंने यह देखने के लिए एक सरल परीक्षण एप्लिकेशन डाउनलोड किया कि यह कैसे काम करता है (जिसे मैं काम नहीं कर सकता)।

यह अभी आवेदन की संरचना है: http://www.iteratorium.eu/stackoverflow/structure.jpg

और पूरी बात यहाँ ज़िप किया गया है: http://www.iteratorium.eu/stackoverflow/flask_app.zip

तीन मॉड्यूल के होते हैं: डिफ़ॉल्ट, मेरे मॉड्यूल और मोबाइल-दृश्यपटल, और मेरे मॉड्यूल और मोबाइल-फ्रंटेंड दोनों निर्देशिकाओं में v_one और v_two दोनों संस्करण हैं। प्रत्येक संस्करण की अपनी .yaml फ़ाइल होती है, जिसमें एक हैंडलर होता है (परीक्षण उद्देश्यों के लिए इसे सरल रखना)

संरचना कम से कम सही है? जब मैं dev_appserver.py फ़ाइल के माध्यम से एप्लिकेशन लोड करता हूं, तब तक सब ठीक है जब तक कि मैं उसी मॉड्यूल के दो संस्करण लोड नहीं करता। उस मामले में, ऐसा होता है:

ट्रैसबैक में
[email protected]_COMPUTER:~/flask_app$ python ~/google_appengine/dev_appserver.py dispatch.yaml app.yaml mobile-frontend/v_one/mobile-frontend.yaml my-module/v_one/my-module.yaml my-module/v_two/my-module.yaml 

परिणाम और निम्नलिखित:

google.appengine.tools.devappserver2.errors.InvalidAppConfigError: Duplicate module: my-module 

(दोनों संस्करणों किसी भी त्रुटि के बिना appcfg.py के माध्यम से ऐप्लिकेशन इंजन पर अपलोड करने के लिए, यह केवल स्थानीय होस्ट हो सकता है सर्वर कई संस्करणों को संभाल नहीं सकता है)

यदि मैं केवल प्रत्येक मॉड्यूल का एक संस्करण लोड करता हूं, तो सबकुछ काम करता है, लेकिन मॉड्यूल lib निर्देशिका से कुछ भी आयात नहीं कर सकता है। एक्सेस करना टर्मिनल में इस में ब्राउज़र परिणामों के माध्यम से http://localhost:8082/mobiler:

from flask import Flask 
ImportError: No module named flask 

मैं appengine_config.py फ़ाइल में lib फ़ोल्डर के लिए पथ परिभाषित लेकिन यह मॉड्यूल के लिए काम करने के लिए प्रतीत नहीं होता। यही वह जगह है जहां मैंने रुक दिया और यहां आने का फैसला किया, क्योंकि मुझे यह भी यकीन नहीं है कि संरचना सही है और मैं इन सब से दूर हो सकता हूं।

तो ... मैं कितना दूर हूं?

import sys 

sys.path.insert(0, 'lib') 
+0

जैसा कि आपने कहा था, समस्या यह है कि स्थानीय देव सर्वर एक ही समय में उसी मॉड्यूल के संस्करणों को संभाल नहीं सकता है। ऐसा कहा जा रहा है, ऐसा लगता है कि मॉड्यूल appengine_config.py नहीं चला रहे हैं, इसलिए उन्हें सभी – marianosimone

उत्तर

0

शायद आप appengine_config.py में एक छोटे से बहुत ज्यादा कर रहे हैं, को कम करने की कोशिश डेव सर्वर को आप एक ही मॉड्यूल के विभिन्न संस्करणों को लोड नहीं दूँगी

लोड होने के लिए आपको appengine_config.py के लिए अपूर्ण डीआईआर में होने वाली मॉड्यूल परिभाषाओं की आवश्यकता है।

ध्यान में रखकर आप वास्तव में बहुत अलग है, एक बेहतर एप्लिकेशन संगठन के रूप में निम्नानुसार होगा दो संस्करणों के लिए कोड रखना चाहते हैं (बस इसे कम रखने के लिए दिखा मोबाइल-दृश्यपटल):

root 
    |__ mobile-frontend 
    | |__ v_one 
    |  |__ __init__.py 
    |  |__ mobiler.py 
    | |__ v_two 
    |  |__ __init__.py 
    |  |__ mobiler.py 
    |__ appengine_config.py 
    |__ dispatch.yaml 
    |__ mobile_frontend_v_one.yaml 
    |__ mobile_frontend_v_two.yaml 

और mobile_frontend_v_one रही है।yaml कुछ ऐसा होने के नाते:

handlers: 
    - url: .*/mobiler 
    script: mobile-frontend.v_one.mobiler.app 
1

टिप्पणी:

+1

पर फ्लास्क लोड नहीं किया गया है, फिर भी, मेरे पास एक ही कोडबेस में अलग-अलग संस्करण नहीं चलेंगे, और गिट का उपयोग करेंगे (जैसा कि ऐसा लगता है कि आप पहले से ही इसका उपयोग कर रहे हैं) विभिन्न संस्करणों का ट्रैक रखने के लिए – marianosimone