फ़्लास्क ऐप्लिकेशन में App Engine Memcache का इस्तेमाल कैसे करें (मॉड्यूल 12)

1. खास जानकारी

सर्वरलेस माइग्रेशन स्टेशन की कोडलैब सीरीज़ (अपने हिसाब से सीखने और प्रैक्टिकल करने वाले ट्यूटोरियल) और इससे जुड़े वीडियो का मकसद, Google Cloud सर्वरलेस डेवलपर की मदद करना है. इससे वे एक या उससे ज़्यादा माइग्रेशन करके, अपने ऐप्लिकेशन को बेहतर बना सकते हैं. इनमें मुख्य रूप से लेगसी सेवाओं से माइग्रेट करना शामिल है. ऐसा करने से, आपके ऐप्लिकेशन को एक जगह से दूसरी जगह ले जाना आसान हो जाता है. साथ ही, आपको ज़्यादा विकल्प और सुविधा मिलती है. इससे आपको Cloud प्रॉडक्ट की ज़्यादा रेंज के साथ इंटिग्रेट करने और उन्हें ऐक्सेस करने में मदद मिलती है. साथ ही, भाषा के नए वर्शन पर आसानी से अपग्रेड किया जा सकता है. शुरुआत में, इस सीरीज़ में मुख्य तौर पर App Engine (स्टैंडर्ड एनवायरमेंट) डेवलपर के लिए कॉन्टेंट शामिल किया गया था. हालांकि, अब इसमें अन्य सर्वरलेस प्लैटफ़ॉर्म के लिए भी कॉन्टेंट शामिल किया गया है. जैसे, Cloud Functions और Cloud Run. इसके अलावा, इसमें अन्य प्लैटफ़ॉर्म के लिए भी कॉन्टेंट शामिल किया गया है.

इस कोडलैब में, App Engine Memcache को Module 1 कोडलैब के सैंपल ऐप्लिकेशन में शामिल करने और इस्तेमाल करने का तरीका बताया गया है. हमने इस 12वें मॉड्यूल के ट्यूटोरियल में Memcache के इस्तेमाल के बारे में बताया है. इसके बाद, 13वें मॉड्यूल में Cloud Memorystore पर माइग्रेट करने के बारे में बताया गया है.

आपको इनके बारे में जानकारी मिलेगी

  • App Engine Memcache API/लाइब्रेरी का इस्तेमाल करना
  • Python 2 के बुनियादी Flask App Engine NDB ऐप्लिकेशन में कैश मेमोरी जोड़ने का तरीका

आपको किन चीज़ों की ज़रूरत होगी

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और एक्सरसाइज़ पूरी करें

Python के साथ अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

Google Cloud की सेवाओं को इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

2. बैकग्राउंड

App Engine Memcache से माइग्रेट करने के लिए, Module 1 codelab से मिले मौजूदा Flask और App Engine NDB ऐप्लिकेशन में, Memcache का इस्तेमाल करने की सुविधा जोड़ें. सैंपल ऐप्लिकेशन में, उपयोगकर्ता की हाल ही की दस विज़िट दिखाई जाती हैं. अगर कोई उपयोगकर्ता अपने ब्राउज़र को रीफ़्रेश करता है, तो लगातार नई विज़िट इकाइयां बनाना और Datastore से सबसे हाल की विज़िट फ़ेच करना सही नहीं है. इसलिए, हम सबसे हाल की उन विज़िट को कैश मेमोरी में सेव करेंगे.

अगर वेबसाइट पर आने वाला वही व्यक्ति पेज पर जाता है, तो उन विज़िट को कैश मेमोरी से वापस लाया जाता है. अगर कोई नया उपयोगकर्ता साइट पर आता है या एक घंटा बीत जाता है, तो कैश मेमोरी को फ़्लश कर दिया जाता है और उसे सबसे हाल की एंट्री से बदल दिया जाता है. साथ ही, एक नई विज़िट रजिस्टर की जाती है. App Engine Memcache इंटिग्रेशन लागू करने के बाद, हम इसे अगले (मॉड्यूल 13) कोडलैब में Cloud Memorystore पर माइग्रेट कर सकते हैं.

इस ट्यूटोरियल में ये चरण शामिल हैं:

  1. सेटअप/प्रीवर्क
  2. कॉन्फ़िगरेशन अपडेट करना
  3. ऐप्लिकेशन कोड में बदलाव करना

3. सेटअप/प्रीवर्क

ट्यूटोरियल के मुख्य हिस्से पर जाने से पहले, आइए हम अपना प्रोजेक्ट सेट अप करें, कोड पाएं, और फिर बेसलाइन ऐप्लिकेशन को डिप्लॉय करें, ताकि हमें पता चल सके कि हमने काम करने वाले कोड से शुरुआत की है.

1. प्रोजेक्ट सेट अप करना

अगर आपने मॉड्यूल 1 का कोडलैब पूरा कर लिया है, तो हमारा सुझाव है कि आप उसी प्रोजेक्ट और कोड का दोबारा इस्तेमाल करें. इसके अलावा, एक नया प्रोजेक्ट बनाया जा सकता है या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल किया जा सकता है. पक्का करें कि प्रोजेक्ट में, बिलिंग के लिए ऐक्टिव खाता हो और App Engine चालू हो.

2. बेसलाइन सैंपल ऐप्लिकेशन पाना

इस कोडलैब के लिए, यह ज़रूरी है कि आपके पास मॉड्यूल 1 का सैंपल ऐप्लिकेशन हो. अगर आपके पास यह ऐप्लिकेशन नहीं है, तो यहां आगे बढ़ने से पहले, ऊपर दिए गए दोनों ट्यूटोरियल में से कोई एक पूरा करें. अगर आपको इस बारे में पहले से पता है, तो नीचे दिए गए मॉड्यूल 1 के कोड से शुरुआत करें.

चाहे आपने कोड बनाया हो या हमने, हम मॉड्यूल 1 के कोड से शुरुआत करेंगे. इस कोडलैब में, आपको हर चरण के बारे में बताया गया है. साथ ही, इसमें ऐसा कोड भी दिया गया है जो मॉड्यूल 11 के repo फ़ोल्डर (FINISH) में मौजूद कोड से मिलता-जुलता है.

मॉड्यूल 1 की शुरुआती फ़ाइलों की डायरेक्ट्री (आपकी या हमारी) ऐसी दिखनी चाहिए:

$ ls
README.md               main.py                 templates
app.yaml                requirements.txt

3. बेसलाइन ऐप्लिकेशन को (फिर से) डिप्लॉय करना

अब आपको ये काम करने हैं:

  1. gcloud कमांड-लाइन टूल के बारे में फिर से जानें
  2. gcloud app deploy की मदद से, सैंपल ऐप्लिकेशन को फिर से डिप्लॉय करना
  3. पुष्टि करें कि ऐप्लिकेशन, App Engine पर बिना किसी समस्या के काम करता है

इन चरणों को पूरा करने के बाद, अगर आपको लगता है कि आपका वेब ऐप्लिकेशन काम कर रहा है (नीचे दिए गए उदाहरण की तरह), तो इसका मतलब है कि अब आप अपने ऐप्लिकेशन में कैश मेमोरी का इस्तेमाल कर सकते हैं.

a7a9d2b80d706a2b.png

4. कॉन्फ़िगरेशन अपडेट करना

App Engine की स्टैंडर्ड कॉन्फ़िगरेशन फ़ाइलों (app.yaml, requirements.txt, appengine_config.py) में कोई बदलाव करने की ज़रूरत नहीं है.

5. ऐप्लिकेशन की फ़ाइलों में बदलाव करना

हम सिर्फ़ App Engine API जोड़ रहे हैं. इसलिए, इसमें कोई बाहरी पैकेज शामिल नहीं है. इसका मतलब है कि कॉन्फ़िगरेशन फ़ाइलों (app.yaml, requirements.txt, appengine_config.py) को अपडेट करने की ज़रूरत नहीं है. सिर्फ़ एक ऐप्लिकेशन फ़ाइल, main.py मौजूद है. इसलिए, इस सेक्शन में किए गए सभी बदलाव सिर्फ़ उस फ़ाइल पर लागू होते हैं.

आयात

सबसे ज़रूरी चरण, Memcache लाइब्रेरी google.appengine.api.memcache को इंपोर्ट करना है. हम एक घंटे के लिए सबसे हाल की विज़िट को कैश मेमोरी में सेव करने जा रहे हैं. इसलिए, आइए एक घंटे में सेकंड की संख्या के लिए भी एक कॉन्स्टेंट जोड़ें. यहां बताया गया है कि बदलाव से पहले और बाद में आपका कोड कैसा दिखता है:

BEFORE:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

app = Flask(__name__)

AFTER:

from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb

app = Flask(__name__)
HOUR = 3600

Memcache की सुविधा के साथ कैश मेमोरी जोड़ने की सुविधा

सबसे अहम बदलाव यह है कि हमने अपने ऐप्लिकेशन में कैश मेमोरी का इस्तेमाल किया है. खास तौर पर, हमें हाल ही की विज़िट को कैश मेमोरी में सेव करना चाहिए. साथ ही, यह देखना चाहिए कि कैश मेमोरी में सेव की गई विज़िट उपलब्ध हैं या नहीं. इसके अलावा, हमें अपने प्लान के हिसाब से, कैश मेमोरी में सेव किए गए नतीजों का ज़्यादा से ज़्यादा इस्तेमाल करने की कोशिश करनी चाहिए. हमारे लक्ष्य को पूरा करने के लिए, ऐप्लिकेशन यह तरीका अपनाएगा:

  1. मौजूदा विज़िट सेट करें और इसे visitor नाम दें
  2. कैश मेमोरी से सबसे हाल का visits फ़ेच करने की कोशिश करें
  3. अगर कैश मेमोरी खाली है या सबसे हाल ही में आने वाला व्यक्ति (visits[0]['visitor']) मौजूदा visitor से अलग है, तो इस नई विज़िट को सेव करें. साथ ही, सबसे हाल की विज़िट फ़ेच करें और उन्हें एक घंटे के लिए कैश मेमोरी में सेव करें.
  4. वेब टेंप्लेट के ज़रिए उपयोगकर्ता को visits दिखाना

इन अपडेट के बाद, यहां पहले और बाद की जानकारी दी गई है:

BEFORE:

@app.route('/')
def root():
    'main application (GET) handler'
    store_visit(request.remote_addr, request.user_agent)
    visits = fetch_visits(10)
    return render_template('index.html', visits=visits)

AFTER:

@app.route('/')
def root():
    'main application (GET) handler'
    # check for (hour-)cached visits
    ip_addr, usr_agt = request.remote_addr, request.user_agent
    visitor = '{}: {}'.format(ip_addr, usr_agt)
    visits = memcache.get('visits')

    # register visit & run DB query if cache empty or new visitor
    if not visits or visits[0]['visitor'] != visitor:
        store_visit(ip_addr, usr_agt)
        visits = list(fetch_visits(10))
        memcache.set('visits', visits, HOUR)  # set() not add()

    return render_template('index.html', visits=visits)

यहां किए गए बदलावों को इमेज में दिखाया गया है:

b1242503602f7bf0.png

Module 1 के सैंपल ऐप्लिकेशन में App Engine memcache का इस्तेमाल करने के लिए, ज़रूरी बदलाव पूरे हो गए हैं. आइए, इस ऐप्लिकेशन को बनाकर डिप्लॉय करें, ताकि यह काम कर सके!

6. खास जानकारी/सफ़ाई

इस सेक्शन में, ऐप्लिकेशन को डिप्लॉय करके इस कोडलैब को पूरा किया गया है. साथ ही, यह पुष्टि की गई है कि ऐप्लिकेशन ठीक से काम कर रहा है और आउटपुट में कोई गड़बड़ी नहीं है. ऐप्लिकेशन की पुष्टि होने के बाद, क्लीन-अप से जुड़े सभी चरण पूरे करें और आगे की कार्रवाई करें.

ऐप्लिकेशन डिप्लॉय करना और उसकी पुष्टि करना

gcloud app deploy की मदद से, अपने ऐप्लिकेशन को फिर से डिप्लॉय करें. साथ ही, पुष्टि करें कि ऐप्लिकेशन काम कर रहा है. आपका कोड अब Module 12 folder में मौजूद कोड से मेल खाना चाहिए. आउटपुट, पहले डिप्लॉय किए गए मॉड्यूल 1 ऐप्लिकेशन जैसा ही होना चाहिए:

a7a9d2b80d706a2b.png

हमने सिर्फ़ एक ही उपयोगकर्ता के लिए, उपयोगकर्ता अनुभव को बेहतर बनाया है. जब वे रीफ़्रेश करते हैं, तो आपको नतीजे सीधे कैश से मिलने चाहिए. इससे न तो कोई नई विज़िट बनती है और न ही Datastore से डेटा फ़ेच होता है.

हमारे सैंपल ऐप्लिकेशन में App Engine memcache सेवा को जोड़ने के लिए, मॉड्यूल 12 का कोडलैब पूरा करने पर बधाई. अब आपके पास बोनस चरण में, इस Python 2 ऐप्लिकेशन को Python 3 पर पोर्ट करने का विकल्प है.

व्यवस्थित करें

सामान्य

अगर आपको अभी और काम नहीं करना है, तो हमारा सुझाव है कि आप अपने App Engine ऐप्लिकेशन को बंद कर दें, ताकि आपसे शुल्क न लिया जाए. हालांकि, अगर आपको कुछ और टेस्ट या एक्सपेरिमेंट करने हैं, तो App Engine प्लैटफ़ॉर्म पर मुफ़्त कोटा उपलब्ध है. इसलिए, जब तक आप इस्तेमाल की उस सीमा से ज़्यादा नहीं होते हैं, तब तक आपसे कोई शुल्क नहीं लिया जाएगा. यह शुल्क कंप्यूट के लिए है. हालांकि, App Engine की सेवाओं के लिए भी शुल्क लिया जा सकता है. इसलिए, ज़्यादा जानकारी के लिए कीमत वाला पेज देखें. अगर इस माइग्रेशन में अन्य क्लाउड सेवाएं शामिल हैं, तो उनके लिए अलग से बिल भेजा जाता है. अगर लागू हो, तो दोनों ही मामलों में, नीचे दिया गया "इस कोडलैब के लिए खास जानकारी" सेक्शन देखें.

पूरी जानकारी के लिए बता दें कि App Engine जैसे Google Cloud के सर्वरलेस कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय करने से, बिल्ड और स्टोरेज के लिए मामूली शुल्क लगता है. Cloud Build का अपना मुफ़्त कोटा होता है. साथ ही, Cloud Storage का भी अपना मुफ़्त कोटा होता है. उस इमेज को सेव करने के लिए, स्टोरेज कोटा का कुछ हिस्सा इस्तेमाल किया जाता है. हालांकि, ऐसा हो सकता है कि आपके देश/इलाके में बिना किसी शुल्क के स्टोरेज इस्तेमाल करने की सुविधा उपलब्ध न हो. इसलिए, स्टोरेज के इस्तेमाल पर नज़र रखें, ताकि संभावित लागत को कम किया जा सके. Cloud Storage के कुछ "फ़ोल्डर" की समीक्षा करनी चाहिए. इनमें ये शामिल हैं:

  • console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • ऊपर दिए गए स्टोरेज लिंक, आपके PROJECT_ID और *LOC*ation पर निर्भर करते हैं. उदाहरण के लिए, अगर आपका ऐप्लिकेशन अमेरिका में होस्ट किया गया है, तो "us" दिखेगा.

दूसरी ओर, अगर आपको इस ऐप्लिकेशन या माइग्रेशन से जुड़े अन्य कोडलैब का इस्तेमाल नहीं करना है और आपको सब कुछ पूरी तरह से मिटाना है, तो अपना प्रोजेक्ट बंद करें.

इस कोडलैब के लिए खास तौर पर

यहां दी गई सेवाएं, इस कोड सीखने की लैब के लिए खास तौर पर बनाई गई हैं. ज़्यादा जानकारी के लिए, हर प्रॉडक्ट का दस्तावेज़ देखें:

  • App Engine Memcache सेवा दो अलग-अलग वर्शन में उपलब्ध है. दोनों के लिए कीमत का स्ट्रक्चर अलग-अलग है. इसलिए, आपको यह ट्रैक करना होगा कि बिलिंग से जुड़ा कौनसे वर्शन का इस्तेमाल किया जा रहा है.
  • App Engine Datastore सेवा, Cloud Datastore (Cloud Firestore in Datastore mode) से मिलती है. इसमें भी बिना शुल्क वाली सेवा उपलब्ध है. ज़्यादा जानकारी के लिए, इसका कीमत वाला पेज देखें.

अगले चरण

अगला लॉजिकल माइग्रेशन, मॉड्यूल 13 में शामिल है. इसमें डेवलपर को App Engine memcache सेवा से Cloud Memorystore पर माइग्रेट करने का तरीका बताया गया है. ये सभी माइग्रेशन वैकल्पिक हैं. ये उन उपयोगकर्ताओं के लिए उपलब्ध हैं जो अपने ऐप्लिकेशन को बेहतर बनाने के लिए अलग-अलग तरीके अपनाना चाहते हैं. Cloud Memorystore सेवा, App Engine के memcache का एक अहम अपग्रेड है. इसकी कई वजहें हैं:

  • Cloud Memorystore, सर्वरलेस नहीं है. इसका मतलब है कि आपको कैश मेमोरी के लिए सर्वर असाइन करना होगा. Cloud Memorystore का भी कोई मुफ़्त टियर नहीं है. इन दोनों फ़ैक्टर का असर लागत पर पड़ सकता है.
  • Cloud Memorystore, स्टोरेज के लिए दो अलग-अलग तरीकों (कैशिंग इंजन) का इस्तेमाल करता है: Redis और Memcached.
  • Cloud Memorystore (for Redis) में, App Engine Memcache के मुकाबले ज़्यादा और बेहतर सुविधाएं उपलब्ध हैं.
  • Cloud Memorystore का इस्तेमाल करने के लिए, आपको Cloud Memorystore सर्वर सेट अप करना होगा. इसके बाद, इसे Google Cloud VPC नेटवर्क में जोड़ना होगा. इसके बाद, App Engine ऐप्लिकेशन को उस नेटवर्क का इस्तेमाल करके, Memorystore सर्वर से कम्यूनिकेट करना होगा.

अगर आपको Cloud Memorystore की सभी सुविधाओं की ज़रूरत नहीं है या आपको इसकी लागत के बारे में चिंता है, तो आपके पास App Engine Memcache का इस्तेमाल जारी रखने का विकल्प है.

मॉड्यूल 13 के अलावा, माइग्रेशन के कई अन्य विकल्प भी उपलब्ध हैं. जैसे, Cloud NDB, Cloud Datastore या Cloud Tasks. Cloud Run और Cloud Functions पर, अलग-अलग प्रॉडक्ट के माइग्रेशन भी किए जा सकते हैं. ये सभी आपको माइग्रेशन रेपो में मिलेंगे.

अगला संभावित चरण, Python 3 पर पोर्ट करना है. इसे अगले सेक्शन में एक वैकल्पिक चरण के तौर पर शामिल किया गया है.

7. बोनस: Python 3 पर माइग्रेट करना

खास जानकारी

इस सेक्शन में, वैकल्पिक बोनस कॉन्टेंट शामिल है. इसमें, हमने अभी ऊपर जिस Module 12 application को पूरा किया है उसे Python 3 पर माइग्रेट किया गया है. हम कॉन्फ़िगरेशन से शुरू करते हैं. इसके बाद, ऐप्लिकेशन की बारी आती है.

app.yaml फ़ाइल को आसान बनाएं

Python 3 रनटाइम का एक फ़ायदा यह है कि app.yaml को काफ़ी हद तक आसान बनाया जा सकता है.

BEFORE:

मॉड्यूल 12 के आखिर में, app.yaml में मौजूद जानकारी यहां दी गई है:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

Python 3 रनटाइम को वेब फ़्रेमवर्क की ज़रूरत होती है, ताकि वे खुद राउटिंग कर सकें. इसलिए, app.yaml में मौजूद सभी राउट हैंडलर को auto में बदलना होगा. अगर कोई स्टैटिक फ़ाइल नहीं है, तो उपयोगकर्ता सीधे तौर पर पूरे handlers: सेक्शन को हटा सकते हैं. इसके अलावा, threadsafe और api_version, दोनों के इस्तेमाल पर रोक लगा दी गई है.

AFTER:

ऊपर बताए गए ज़रूरी बदलावों के साथ, Python 3 के लिए यह app.yaml है:

runtime: python39
app_engine_apis: true

सिर्फ़ app_engine_apis: true लाइन के बारे में जानकारी देना ज़रूरी है. साल 2021 में, लेगसी App Engine की सेवाएं दूसरी जनरेशन के रनटाइम के लिए उपलब्ध कराई गई थीं. इनमें से कुछ रनटाइम, जैसे कि Python 3 को ndb, taskqueue, और memcache जैसे एपीआई ऐक्सेस करने के लिए, अतिरिक्त बूटस्ट्रैपिंग की ज़रूरत होती है. कॉन्फ़िगरेशन में मौजूद यह लाइन, इसी मकसद के लिए है.

requirements.txt फ़ाइल अपडेट करना

requirements.txt में ओरिजनल एपीआई का एक और बूटस्ट्रैपिंग ज़रूरी है: इसमें नए App Engine SDK का ऐक्सेस शामिल होना चाहिए.

BEFORE:

मॉड्यूल 12 के आखिर में, app.yaml में मौजूद जानकारी यहां दी गई है:

flask

AFTER:

App Engine Python SDK टूल को जोड़ें. इसके बाद, आपके पास ये चीज़ें होनी चाहिए:

flask
appengine-python-standard

appengine_config.py और lib मिटाएं

अगली जनरेशन के App Engine रनटाइम में, तीसरे पक्ष के पैकेज के इस्तेमाल को बेहतर बनाया गया है:

  • पहले से मौजूद लाइब्रेरी वे लाइब्रेरी होती हैं जिनकी जांच Google करता है और उन्हें App Engine सर्वर पर उपलब्ध कराता है. ऐसा इसलिए किया जाता है, क्योंकि इनमें C/C++ कोड होता है. डेवलपर को इस कोड को क्लाउड पर डिप्लॉय करने की अनुमति नहीं होती. ये लाइब्रेरी, दूसरी जनरेशन के रनटाइम में अब उपलब्ध नहीं हैं.
  • दूसरी जनरेशन के रनटाइम में, नॉन-बिल्ट-इन लाइब्रेरी (कभी-कभी इसे "वेंडरिंग" या "सेल्फ़-बंडलिंग" कहा जाता है) को कॉपी करने की अब ज़रूरत नहीं है. इसके बजाय, उन्हें requirements.txt में शामिल किया जाना चाहिए. यहां बिल्ड सिस्टम, डिप्लॉयमेंट के समय उन्हें आपकी ओर से अपने-आप इंस्टॉल कर देता है.

तीसरे पक्ष के पैकेज मैनेजमेंट में हुए बदलावों की वजह से, अब न तो appengine_config.py फ़ाइल की ज़रूरत है और न ही lib फ़ोल्डर की. इसलिए, इन्हें मिटा दें. दूसरी जनरेशन के रनटाइम में, App Engine, requirements.txt में दिए गए तीसरे पक्ष के पैकेज अपने-आप इंस्टॉल कर देता है. खास जानकारी जनरेट की जा रही है:

  1. सेल्फ़-बंडल्ड या तीसरे पक्ष की कॉपी की गई लाइब्रेरी नहीं होनी चाहिए. उन्हें requirements.txt में सूची बनाएं
  2. pip install को lib फ़ोल्डर में नहीं ले जाया जा सकता. इसका मतलब है कि lib फ़ोल्डर नहीं बनाया जा सकता
  3. app.yaml में, तीसरे पक्ष की कोई भी लाइब्रेरी शामिल नहीं है. इसलिए, libraries सेक्शन मौजूद नहीं है. इन्हें requirements.txt में शामिल करें
  4. आपके ऐप्लिकेशन में तीसरे पक्ष की किसी भी लाइब्रेरी का इस्तेमाल नहीं किया गया है. इसका मतलब है कि कोई appengine_config.py फ़ाइल नहीं है

डेवलपर के लिए, requirements.txt में सभी ज़रूरी तीसरे पक्ष की लाइब्रेरी की सूची बनाना ही ज़रूरी है.

App Engine SDK का इस्तेमाल करने के लिए ऐप्लिकेशन को अपडेट करना

ऊपर बताया गया है कि Python 3 ऐप्लिकेशन को App Engine की बंडल की गई सेवाओं को ऐक्सेस करने के लिए, कुछ बदलाव करने पड़ते हैं:

  1. App Engine SDK टूल को बंडल करें (requirements.txt में)
  2. app.yaml में App Engine SDK चालू करना
  3. WSGI ऑब्जेक्ट को रैप करें (main.py में)

पहले दो जोड़े ऊपर दिए गए हैं. इसलिए, आखिरी ज़रूरी शर्त main.py को अपडेट करना है.

BEFORE:

यहां मॉड्यूल 12 के आखिर में दिया गया Python 2 main.py दिया गया है:

from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb

app = Flask(__name__)
HOUR = 3600

AFTER:

Python 3 पोर्ट के लिए, एसडीके इंपोर्ट करें और Flask ऐप्लिकेशन ऑब्जेक्ट को इससे रैप करें (एसडीके रैपर). इससे आपको यह नतीजा मिलेगा:

from flask import Flask, render_template, request
from google.appengine.api import memcache, wrap_wsgi_app
from google.appengine.ext import ndb

app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)
HOUR = 3600

डेवलपर को अपने Python ऐप्लिकेशन में ये बदलाव करने होंगे, ताकि वे 2.x से 3.x वर्शन पर पोर्ट कर सकें. इससे वे बंडल की गई सेवाओं को ऐक्सेस कर पाएंगे. अगर Flask का इस्तेमाल नहीं किया जा रहा है, तो दस्तावेज़ में Django और Pyramid के सैंपल भी दिए गए हैं. अगर आपका Python 2 कोड कोई वेब ऐप्लिकेशन नहीं है, तो Python 3 में पोर्ट करते समय सिर्फ़ SDK पैकेज को शामिल करना काफ़ी होगा. हमारे ऐप्लिकेशन कोड को मूल रूप से Python 2 और 3 के साथ काम करने के लिए बनाया गया था. इसलिए, इसमें कोई और बदलाव करने की ज़रूरत नहीं है.

ऐप्लिकेशन डिप्लॉय करना

ऊपर दिए गए बदलाव करने के बाद, अपडेट किए गए सैंपल ऐप्लिकेशन को डिप्लॉय किया जा सकता है. (एक ही GCP प्रोजेक्ट में, Python 2 के ओरिजनल वर्शन पर Python 3 वर्शन को डिप्लॉय करने में कोई समस्या नहीं होती.) ऐप्लिकेशन का व्यवहार पहले जैसा ही रहना चाहिए. अगर आपको अपने अपडेट किए गए ऐप्लिकेशन की तुलना हमारे ऐप्लिकेशन से करनी है, तो माइग्रेशन रेपो में मॉड्यूल 12b फ़ोल्डर देखें. Python 3 जैसे नए रनटाइम में App Engine की बंडल की गई सेवाओं के साथ काम करने की सुविधा के बारे में ज़्यादा जानने के लिए, सुविधा लॉन्च करने से जुड़ी सूचना और मॉड्यूल 17 का कोडलैब देखें.

मॉड्यूल 12 में बोनस चरण पूरा करने के लिए बधाई! Python 3 रनटाइम के लिए कॉन्फ़िगरेशन फ़ाइलें तैयार करने से जुड़ा दस्तावेज़ भी देखें. अगले चरणों और डेटा को हटाने के लिए, ऊपर दिया गया खास जानकारी/डेटा हटाने का सेक्शन देखें.

8. अन्य संसाधन

यहां डेवलपर के लिए कुछ और संसाधन दिए गए हैं. इनकी मदद से, डेवलपर इस या इससे मिलते-जुलते माइग्रेशन मॉड्यूल के साथ-साथ इससे जुड़े प्रॉडक्ट के बारे में ज़्यादा जान सकते हैं. इसमें इस कॉन्टेंट पर सुझाव/राय देने या शिकायत करने की जगह, कोड के लिंक, और कई तरह के दस्तावेज़ शामिल हैं, जो आपके काम आ सकते हैं.

कोडलैब से जुड़ी समस्याएं/सुझाव/राय

अगर आपको इस कोडलैब में कोई समस्या मिलती है, तो कृपया शिकायत दर्ज करने से पहले अपनी समस्या खोजें. नई समस्याएं खोजने और बनाने के लिए लिंक:

माइग्रेशन के लिए उपलब्ध संसाधन

मॉड्यूल 2 (START) और मॉड्यूल 12 (FINISH) के लिए, रेपो फ़ोल्डर के लिंक यहाँ दिए गए हैं. इन्हें App Engine के सभी कोडलैब माइग्रेशन के लिए उपलब्ध repo से भी ऐक्सेस किया जा सकता है. इसे क्लोन किया जा सकता है या इसकी ZIP फ़ाइल डाउनलोड की जा सकती है.

कोडलैब

Python 2

Python 3

Module 1

code

कोड (इस ट्यूटोरियल में शामिल नहीं है)

मॉड्यूल 12 (यह कोडलैब)

code

code

ऑनलाइन रेफ़रंस

यहां कुछ ऑनलाइन संसाधन दिए गए हैं, जो इस ट्यूटोरियल के लिए काम के हो सकते हैं:

App Engine

Cloud Memorystore और Cloud Datastore

क्लाउड से जुड़ी अन्य जानकारी

वीडियो

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.