ماژول 1: از App Engine webapp2 به Flask مهاجرت کنید

1. بررسی اجمالی

هدف این سری از نرم‌افزارهای کد (آموزش‌های عملی و خودکار) به توسعه‌دهندگان Google App Engine (استاندارد) کمک می‌کند تا برنامه‌های خود را با هدایت آن‌ها از طریق یک سری مهاجرت مدرن‌سازی کنند. مهم‌ترین گام دور شدن از سرویس‌های همراه با زمان اجرا اصلی است زیرا زمان‌های اجرا نسل بعدی انعطاف‌پذیرتر هستند و گزینه‌های خدمات متنوع‌تری را در اختیار کاربران قرار می‌دهند. حرکت به نسل جدیدتر زمان اجرا به شما امکان می دهد تا راحت تر با محصولات Google Cloud ادغام شوید، از طیف وسیع تری از خدمات پشتیبانی شده استفاده کنید و از نسخه های زبان فعلی پشتیبانی کنید.

این آموزش اولیه اولین مراحل انتقال را برای مدرن کردن چارچوب وب در برنامه‌های App Engine نشان می‌دهد: انتقال از webapp2 به Flask . در برنامه خود، می‌توانید از هر چارچوب وب که مسیریابی را مدیریت می‌کند، استفاده کنید، اما برای این آموزش، ما از Flask استفاده می‌کنیم که به طور گسترده توسط جامعه استفاده می‌شود.

شما یاد خواهید گرفت که چگونه

  • استفاده از کتابخانه های شخص ثالث (ساخته شده یا غیره)
  • به روز رسانی فایل های پیکربندی
  • یک برنامه ساده را از webapp2 به Flask منتقل کنید

آنچه شما نیاز دارید

نظرسنجی

چگونه از این کد لبه استفاده خواهید کرد؟

فقط آن را بخوانید آن را بخوانید و تمرینات را کامل کنید

2. پس زمینه

زمانی که App Engine برای اولین بار در Python 2.5 در سال 2008 راه اندازی شد، فریم ورک webapp همراه شد. سال ها بعد زمانی که زمان اجرا 2.7 در سال 2013 از 2.5 منسوخ شد، جایگزین webapp2 شد.

در حالی که webapp2 (به اسناد مراجعه کنید) هنوز وجود دارد و می‌تواند خارج از App Engine به‌عنوان یک چارچوب وب سازگار با WSGI استفاده شود، مسیریابی درخواست‌های کاربر به کد مناسب در برنامه را انجام نمی‌دهد. در عوض، به App Engine، فایل‌های پیکربندی و توسعه‌دهنده متکی است تا آن مسیریابی ترافیک وب را به «هندلر» مربوطه انجام دهد. علاوه بر این، مزایای اصلی webapp2 به طور جدایی ناپذیری با سرویس‌های همراه App Engine مرتبط است، حتی اگر روی Python 3 کار می‌کند، عملاً آن را منسوخ می‌کند (همچنین به موضوع مرتبط مراجعه کنید).

این ماژول به پزشکان تجربه عملی برای انتقال یک برنامه webapp2 ساده به Flask، چارچوبی که توسط App Engine و بسیاری از خدمات دیگر خارج از Google Cloud پشتیبانی می‌شود، می‌دهد و برنامه‌ها را بسیار قابل حمل‌تر می‌کند. اگر Flask چارچوب مورد نظری برای انتقال برنامه شما نیست، می توانید تا زمانی که مسیریابی خود را انجام می دهد، دیگری را انتخاب کنید. این کد لبه به تصمیم گیرندگان فناوری اطلاعات (ITDM) و توسعه دهندگان مراحل مهاجرت را نشان می دهد، بنابراین می توانید بدون توجه به اینکه واقعاً به کدام چارچوب مهاجرت می کنید، با این فرآیند آشنا شوید.

این مراحل اولیه برای این مهاجرت هستند:

  1. راه اندازی/پیش کار
  2. کتابخانه شخص ثالث Flask را اضافه کنید
  3. به روز رسانی فایل های برنامه
  4. فایل قالب HTML را به روز کنید

3. راه اندازی/پیش کار

قبل از شروع بخش اصلی آموزش، بیایید پروژه خود را راه‌اندازی کنیم، کد را دریافت کنیم، سپس شما را با دستور gcloud (دوباره) آشنا کنیم و برنامه پایه را اجرا کنیم تا بدانیم با کد کار شروع کرده‌ایم.

1. پروژه راه اندازی

به‌عنوان یک توسعه‌دهنده موجود، داشبورد App Engine شما احتمالاً از قبل نشان می‌دهد که چه خدماتی را اجرا می‌کنید. برای اهداف این آموزش، توصیه می کنیم یک پروژه کاملاً جدید ایجاد کنید یا از یک موجود برای این آموزش استفاده مجدد کنید. مطمئن شوید که پروژه دارای حساب صورتحساب فعال است و App Engine (برنامه) فعال است.

2. برنامه نمونه پایه را دانلود کنید

مخزن مهاجرت GAE تمام کدهای مورد نیاز شما را دارد. آن را کلون کنید یا فایل ZIP آن را دانلود کنید. برای این آموزش، با کد موجود در پوشه ماژول 0 (START) شروع می‌کنید و پس از تکمیل آموزش، کد شما باید با پوشه ماژول 1 (FINISH) مطابقت داشته باشد. اگر نه، تفاوت ها را بررسی کنید تا بتوانید به آزمایشگاه بعدی بروید.

پوشه Module 0 باید فایل هایی شبیه به این داشته باشد، همانطور که با دستور POSIX ls نشان داده شده است:

$ ls
app.yaml        index.html      main.py

3. (دوباره) با دستورات gcloud آشنا شوید

اگر هنوز دستور gcloud روی دستگاه خود ندارید، Google Cloud SDK را نصب کنید و مطمئن شوید که gcloud به عنوان بخشی از مسیر اجرای شما در دسترس است و با دستورات gcloud زیر آشنا شوید:

  1. gcloud components update — Google Cloud SDK را به روز کنید
  2. gcloud auth login — وارد حساب کاربری خود شوید
  3. gcloud config list - لیست تنظیمات پیکربندی پروژه GCP
  4. gcloud config set project PROJECT_ID — شناسه پروژه GCP را تنظیم کنید
  5. gcloud app deploy — برنامه App Engine خود را استقرار دهید

اگر اخیراً توسعه App Engine را با gcloud انجام نداده‌اید، باید چهار دستور اول (#1-#4) را برای راه‌اندازی قبل از رفتن به مراحل بعدی اجرا کنید. بیایید مروری سریع بر این دستورات داشته باشیم.

در مرحله اول، gcloud components update تضمین می کند که آخرین نسخه Cloud SDK را دارید. اجرای این دستور باید خروجی ای مانند زیر بدهد:

$ gcloud components update

Your current Cloud SDK version is: 317.0.0
You will be upgraded to version: 318.0.0

┌──────────────────────────────────────────────────┐
│        These components will be updated.         │
├──────────────────────────┬────────────┬──────────┤
│           Name           │  Version   │   Size   │
├──────────────────────────┼────────────┼──────────┤
│ Cloud SDK Core Libraries │ 2020.11.06 │ 15.5 MiB │
│ gcloud cli dependencies  │ 2020.11.06 │ 10.6 MiB │
└──────────────────────────┴────────────┴──────────┘

The following release notes are new in this upgrade.
Please read carefully for information about new features, breaking changes,
and bugs fixed.  The latest full release notes can be viewed at:
  https://cloud.google.com/sdk/release_notes

318.0.0 (2020-11-10)

      . . .
      (release notes)
      . . .

    Subscribe to these release notes at
    https://groups.google.com/forum/#!forum/google-cloud-sdk-announce.

Do you want to continue (Y/n)?

╔════════════════════════════════════════════════════════════╗
╠═ Creating update staging area                             ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Uninstalling: Cloud SDK Core Libraries                   ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Uninstalling: gcloud cli dependencies                    ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: Cloud SDK Core Libraries                     ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: gcloud cli dependencies                      ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Creating backup and activating new installation          ═╣
╚════════════════════════════════════════════════════════════╝

Performing post processing steps...done.

Update done!

To revert your SDK to the previously installed version, you may run:
  $ gcloud components update --version 317.0.0

در مرحله بعد، gcloud auth login برای احراز هویت خود برای دستورات gcloud که در حرکت رو به جلو صادر می کنید استفاده کنید:

$ gcloud auth login
Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?response_type=code&client_id= . . .

You are now logged in as [YOUR_EMAIL].
Your current project is [PROJECT_ID].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID

از gcloud config list برای مشاهده تنظیمات پروژه فعلی خود استفاده کنید:

$ gcloud config list
[core]
account = YOUR_EMAIL
disable_usage_reporting = False
project = PROJECT_ID

Your active configuration is: [default]

دستور بالا باید شما را در ایجاد یک پروژه جدید یا انتخاب یک پروژه موجود راهنمایی کند. اگر خروجی gcloud config list با پروژه انتخابی که می‌خواهید برای این آموزش استفاده کنید مطابقت ندارد، gcloud config set project PROJECT_ID برای تنظیم شناسه پروژه اجرا کنید. سپس، با اجرای مجدد gcloud config list تأیید کنید که شناسه پروژه مناسب تنظیم شده است.

$ gcloud config set project PROJECT_ID
Updated property [core/project].

اگر ترجیح می دهید به جای آن از Cloud Console استفاده کنید، می توانید از رابط کاربری برای ایجاد یک پروژه جدید در صورت تمایل استفاده کنید یا از پروژه های قبلی که قبلاً دارید استفاده کنید. در داشبورد پروژه خود، باید کارت اطلاعات پروژه را ببینید که شناسه آن (به همراه نام و شماره پروژه) را نشان می دهد:

کارت اطلاعات پروژه

آخرین دستور (#5)، gcloud app deploy ، برای استقرار برنامه شما در App Engine است. از آنجایی که ما تازه شروع کرده ایم، اجرای آن در حال حاضر اختیاری است، اما مطمئناً از استقرار کد ماژول 0 برای تأیید کارکرد آن جلوگیری نمی کنیم. پس از اجرا، منطقه جغرافیایی را که می خواهید برنامه در آن اجرا شود (معمولاً جایی که در آن قرار دارید) انتخاب کنید. با این حال، پس از تنظیم نمی توان آن را تغییر داد. سپس بقیه اطلاعات استقرار را تماشا کنید. پس از تکمیل، از آدرس اینترنتی برنامه شما مطلع می شوید. در اینجا یک نسخه خلاصه شده از آنچه ممکن است ببینید آمده است:

$ gcloud app deploy
Services to deploy:

descriptor:      [/private/tmp/mod0-baseline/app.yaml]
source:          [/private/tmp/mod0-baseline]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [20201116t220827]
target url:      [https://PROJECT_ID.REG_ABBR.r.appspot.com]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1 file to Google Cloud Storage                 ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.r.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

اگر مدتی است از App Engine استفاده نکرده‌اید، ممکن است متوجه شوید که دستور appcfg.py update با gcloud app deploy جایگزین شده است. برای کسب اطلاعات بیشتر در مورد gcloud app deploy ، صفحه مستندات آن را بررسی کنید.

یکی دیگر از تغییرات اخیر، URL برنامه‌های مستقر شده است که از http://PROJECT_ID.appspot.com به http://PROJECT_ID.REG_ABBR.r.appspot.com تغییر یافته است. اکثر برنامه ها در نهایت به فرمت جدید تبدیل می شوند. اطلاعات بیشتر در مورد قالب URL در درخواست‌ها و مستندات مسیریابی .

پس از استقرار برنامه، مرورگر را (احتمالاً چند بار) بازخوانی کنید تا آخرین بازدیدها را مشاهده کنید:

برنامه visitme

اگر برنامه شما جدید است، فقط یک یا چند بازدید را خواهید دید.

4. کتابخانه شخص ثالث Flask را اضافه کنید

زمان اجرا Python 2 App Engine مجموعه‌ای از کتابخانه‌های شخص ثالث "ساخت‌شده" را ارائه می‌کند که تنها کاری که باید انجام دهید این است که آنها را در فایل app.yaml خود برای استفاده مشخص کنید. در حالی که این مهاجرت نیازی به استفاده از آنها ندارد، آنها در آموزش مهاجرت بعدی (برای ماژول 2) ارائه خواهند شد.

کتابخانه های شخص ثالثی که داخلی نیستند باید در فایلی به نام requirements.txt مشخص شوند و به صورت محلی در پوشه lib در همان فهرست کد برنامه نصب شوند که همه چیز در App Engine آپلود می شود. اسناد بسته‌بندی کتابخانه‌های شخص ثالث اطلاعات بیشتری دارد.

کتابخانه‌های کپی‌شده مانند Flask نیاز دارند که به App Engine بگویید با استفاده از فایل پیکربندی appengine_config.py آنها را در پوشه lib جستجو کند. فایل پیکربندی appengine_config.py در همان پوشه برنامه سطح بالا به عنوان requirements.txt و lib قرار می گیرد. در این قسمت از آموزش، شما:

  • ایجاد requirements.txt (کتابخانه های شخص ثالث [غیر داخلی] کپی شده را مشخص کنید)
  • ایجاد appengine_config.py (تشخیص کتابخانه های شخص ثالث)
  • بسته ها و وابستگی ها (شخص ثالث) را نصب کنید

1. requirements.txt ایجاد کنید

برای مشخص کردن بسته های خود، یک فایل requirements.txt ایجاد کنید. در مورد ما، Flask کتابخانه شخص ثالثی است که مورد نیاز است. در زمان نگارش این مقاله، آخرین نسخه 1.1.2 است، پس با این یک خط، requirements.txt ایجاد کنید:

Flask==1.1.2

برای کسب اطلاعات بیشتر در مورد فرمت های پذیرفته شده به مستندات requirements.txt مراجعه کنید.

2. appengine_config.py را ایجاد کنید

قدم بعدی این است که App Engine کتابخانه های خارجی شخص ثالث را تشخیص دهد. یک فایل با نام appengine_config.py با محتوای زیر ایجاد کنید:

from google.appengine.ext import vendor

# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)

این کد دقیقاً همان کاری را انجام می دهد که قبلاً مشخص کردیم، یعنی App Engine را به پوشه lib برای کتابخانه های کپی شده نشان می دهد.

3. بسته(ها) و وابستگی ها را نصب کنید

اکنون دستور pip install را اجرا کنید تا پوشه lib ایجاد شود و Flask و وابستگی های آن را در آنجا نصب کنید:

$ pip install -t lib -r requirements.txt

چه از pip یا pip2 استفاده کرده باشید، پس از اتمام نصب بسته، باید یک پوشه lib داشته باشید که دارای محتویاتی شبیه به موارد زیر باشد:

$ ls lib
bin/
click/
click-7.1.2.dist-info/
flask/
Flask-1.1.2.dist-info/
itsdangerous/
itsdangerous-1.1.0.dist-info/
jinja2/
Jinja2-2.11.2.dist-info/
markupsafe/
MarkupSafe-1.1.1.dist-info/
werkzeug/
Werkzeug-1.0.1.dist-info/

5. فایل های برنامه را به روز کنید

حالا بیایید فایل برنامه main.py را به روز کنیم.

1. واردات

مانند تمام فایل‌های پایتون، ورودی‌ها در اولویت قرار دارند. وارد کردن چارچوب webapp2 توسط کتابخانه ndb Datastore، و در نهایت، پسوند App Engine که قالب‌های با طعم جنگو را پردازش می‌کند، دنبال می‌شود. شما باید موارد زیر را ببینید:

  • قبل از:
import webapp2
from google.appengine.ext import ndb
from google.appengine.ext.webapp import template

هنگام انتقال به Flask، شما هر دو قطعه Flask و رندر الگو را همزمان وارد می‌کنید. جفت واردات مربوط به webapp2 را حذف کنید و آنها را به صورت زیر جایگزین کنید (ورود ndb را همانطور که هست رها کنید):

  • بعد از:
from flask import Flask, render_template, request
from google.appengine.ext import ndb

2. راه اندازی

برنامه‌هایی که از webapp2 استفاده می‌کنند به یک آرایه واحد (فهرست پایتون) نیاز دارند که همه مسیرها و کنترل‌کننده‌ها را در هر فایل پایتون فهرست می‌کند (ممکن است موارد دیگر وجود داشته باشد):

  • قبل از:
app = webapp2.WSGIApplication([
    ('/', MainHandler),
], debug=True)

به خاطر داشته باشید که app.yaml مسیریابی سطح بالاتری را انجام می دهد و ممکن است کنترل کننده های مختلفی را فراخوانی کند. برنامه نمونه به اندازه کافی ساده است که همه مسیرها به کنترل کننده main.py می آیند.

Flask از جداول مسیریابی مانند این استفاده نمی کند، بنابراین این خطوط را در main.py حذف کنید. Flask همچنین به مقداردهی اولیه نیاز دارد، بنابراین خط زیر را در بالای main.py درست زیر import اضافه کنید:

  • بعد از:
app = Flask(__name__)

در Flask، چارچوب را مقداردهی اولیه می کنید و سپس از دکوراتورها برای تعریف مسیرها استفاده می کنید. همچنین مسیرها با توابع جفت می‌شوند، نه کلاس‌ها و متدها.

گنجاندن یک آموزش Flask در این کد لبه خارج از محدوده است، بنابراین مدتی را صرف کار با آموزش Flask کنید و مستندات Flask را مرور کنید تا با چارچوب راحت تر شوید.

3. مدل داده

هیچ تغییری در اینجا وجود ندارد. Datastore تمرکز برنامه کد بعدی خواهد بود.

4. هندلرها

برنامه، صرف نظر از اینکه از کدام فریم ورک استفاده می کنید ( webapp2 یا Flask)، 3 کار را انجام می دهد:

  1. مدیریت مسیر ریشه ( / ) درخواست های GET
  2. ثبت یک صفحه وب "بازدید" (ایجاد/ذخیره شی Visit )
  3. نمایش 10 بازدید اخیر برتر (با یک الگوی از پیش تعریف شده، index.html )

چارچوب webapp2 از یک مدل اجرای مبتنی بر کلاس استفاده می کند که در آن کنترل کننده هایی برای هر روش HTTP پشتیبانی شده ایجاد می شود. در حالت ساده ما، ما فقط GET داریم، بنابراین یک متد get() تعریف می‌شود:

  • قبل از:
class MainHandler(webapp2.RequestHandler):
    def get(self):
        store_visit(self.request.remote_addr, self.request.user_agent)
        visits = fetch_visits(10) or ()  # empty sequence if None
        tmpl = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(tmpl, {'visits': visits}))

همانطور که در بالا ذکر شد، Flask مسیریابی خود را انجام می دهد. به جای یک کلاس handler، توابع را می نویسید و آنها را با مسیری که باید فراخوانی شوند تزئین می کنید. کاربران می‌توانند روش‌های HTTP را که در فراخوانی دکوراتور استفاده می‌شوند، به عنوان مثال @app.route('/app/', methods=['GET', 'POST']) مشخص کنند. از آنجایی که پیش‌فرض فقط GET است (و بطور ضمنی HEAD )، می‌توان آن را کنار گذاشت.

در مهاجرت به Flask، کلاس MainHandler و متد get() آن را با تابع مسیریابی Flask زیر جایگزین کنید:

  • بعد از:
@app.route('/')
def root():
    store_visit(request.remote_addr, request.user_agent)
    visits = fetch_visits(10) or ()  # empty sequence if None
    return render_template('index.html', visits=visits)

البته این نماینده برنامه شما نیست که مطمئناً پیچیده تر از این نمونه خواهد بود. یکی از هدف‌های اصلی این آموزش‌ها کمک به شما برای شروع، ساختن بخشی از آن «حافظه ماهیچه‌ای» و درک مکان‌هایی است که می‌توانید در کدهای App Engine تغییرات ایجاد کنید. برای تأیید اینکه این تغییر را به درستی انجام داده اید، تغییر خود را با ماژول 1 main.py مقایسه کنید.

5. فایل های کمکی

هیچ تغییری در فایل .gcloudignore وجود ندارد. هدف آن تعیین فایل‌هایی است که در App Engine مستقر نمی‌شوند و برای استقرار و اجرای برنامه ضروری نیستند، از جمله، اما نه محدود به کمکی Python، کنترل منبع، repo boilerplate و فایل‌های دیگر. .gcloudignore ما به این شکل است (با نظرات حذف شده برای اختصار):

.gcloudignore
.git
.gitignore
.hgignore
.hg/
*.pyc
*.pyo
__pycache__/
/setup.cfg
README.md

6. فایل قالب HTML را به روز کنید

1. انتقال فایل قالب

در پوشه repo baseline (Module 0)، فایل قالب index.html در همان پوشه فایل های برنامه قرار دارد. از آنجایی که Flask به فایل‌های HTML نیاز دارد که در یک پوشه templates قرار داده شوند، باید آن پوشه ( mkdir templates ) را ایجاد کنید و index.html به آنجا منتقل کنید. در یک سیستم سازگار با POSIX مانند لینوکس یا Mac OS X، دستورات عبارتند از:

mkdir templates
mv index.html templates

2. فایل قالب را به روز کنید

هنگامی که index.html به templates منتقل کردید، نوبت به انجام یک ویرایش کوچک اما ضروری می رسد. بیایید فایل قالب اصلی را به طور کامل بررسی کنیم:

<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>

<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
    <li>{{ visit.timestamp.ctime }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>

</body>
</html>

در حالی که webapp2 از قالب‌های جنگو استفاده می‌کند که قابلیت‌های فراخوانی مانند visit.timestamp.ctime بدون پرانتز ( ) اجرا می‌کنند، Jinja2 به صراحت به آنها نیاز دارد. در حالی که این یک تغییر جزئی به نظر می رسد، الگوهای Jinja در خارج از جعبه قدرتمندتر هستند زیرا می توانید آرگومان ها را در تماس ها ارسال کنید.

در جنگو، یا باید یک «تگ الگو» ایجاد کنید یا یک فیلتر بنویسید. با این درک، index.html با افزودن یک جفت پرانتز به تماس visit.timestamp.ctime به روز کنید:

  • قبل از:
<li>{{ visit.timestamp.ctime }} from {{ visit.visitor }}</li>
  • بعد از:
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>

این تنها تغییر مورد نیاز است. هیچ تغییر اضافی در index.html برای همه کدهای مهاجرت باقیمانده لازم نیست.

7. خلاصه/پاکسازی

استقرار برنامه

وقتی تمام تغییرات این آموزش را کامل کردید، فایل‌های موجود در پوشه برنامه شما باید با فایل موجود در پوشه مخزن ماژول 1 یکسان (یا تقریباً مشابه) باشند. اکنون مستقر کنید و ببینید که برنامه Module 1 Flask شما به طور یکسان با نسخه webapp2 Module 0 اجرا می شود.

همانطور که قبلاً هنگام استقرار کد اصلی ماژول 0 از دستور gcloud app deploy استفاده کردیم. دسترسی به برنامه در PROJECT_ID.appspot.com ، چه از طریق یک مرورگر وب یا یک دستور curl یا wget برای تأیید کارکرد آن مطابق انتظار.

اگر نوعی خطای سرور دریافت کردید، معمولاً به معنای نوعی اشتباه تایپی در کد پایتون شماست. برای بررسی به گزارش های برنامه خود نگاهی بیندازید. همچنین فایل های خود را با فایل های موجود در مخزن ماژول 1 مقایسه کنید (لینک درست در بالا).

اختیاری: تمیز کردن

در مورد تمیز کردن برای جلوگیری از دریافت صورت‌حساب تا زمانی که آماده باشید به آزمایشگاه کد مهاجرت بعدی بروید، چطور؟ به‌عنوان توسعه‌دهندگان موجود، احتمالاً از قبل از اطلاعات قیمت‌گذاری App Engine به‌روز هستید.

اختیاری: برنامه را غیرفعال کنید

اگر هنوز برای رفتن به آموزش بعدی آماده نیستید، برای جلوگیری از تحمیل هزینه ، برنامه خود را غیرفعال کنید . هنگامی که برای رفتن به کد بعدی آماده شدید، می توانید آن را دوباره فعال کنید. زمانی که برنامه شما غیرفعال است، هیچ ترافیکی برای دریافت هزینه دریافت نمی‌کند، اما مورد دیگری که می‌توانید برای آن صورت‌حساب دریافت کنید، استفاده از Datastore شما در صورت فراتر رفتن از سهمیه رایگان است، بنابراین به اندازه‌ای حذف کنید که تحت این محدودیت قرار بگیرید.

از طرف دیگر، اگر نمی‌خواهید مهاجرت را ادامه دهید و می‌خواهید همه چیز را به طور کامل حذف کنید، می‌توانید پروژه خود را خاموش کنید .

مراحل بعدی

دو ماژول مهاجرت وجود دارد که با کد تکمیل شده ماژول 1 شروع می شود، ماژول های 2 و 7:

  • ماژول 2 (الزامی در صورت استفاده از Datastore)
    • از App Engine ndb به Cloud NDB مهاجرت کنید
    • پس از تغییر به Cloud NDB، بسیاری از گزینه های دیگر در دسترس قرار می گیرند
      • کانتینر کردن برنامه برای اجرا در Cloud Run
      • انتقال بیشتر برنامه خود به کتابخانه سرویس گیرنده Cloud Datastore
      • برای دسترسی به ویژگی های Firebase، برنامه خود را به Cloud Firestore منتقل کنید
  • ماژول 7 (الزامی در صورت استفاده از [push] Task Queues)
    • استفاده از taskqueue (فشار) App Engine را اضافه کنید
    • برنامه ماژول 1 را برای مهاجرت به Cloud Tasks در ماژول 8 آماده می کند

8. منابع اضافی

مشکلات/بازخورد مربوط به ماژول کدهای ماژول مهاجرت موتور برنامه

اگر مشکلی در این کد لبه پیدا کردید، لطفاً قبل از تشکیل پرونده ابتدا مشکل خود را جستجو کنید. پیوندهایی برای جستجو و ایجاد مسائل جدید:

منابع مهاجرت

پیوندهای پوشه‌های مخزن برای ماژول 0 (START) و ماژول 1 (FINISH) را می‌توانید در جدول زیر پیدا کنید. همچنین می‌توانید از مخزن برای همه مهاجرت‌های App Engine که می‌توانید یک فایل ZIP را شبیه‌سازی یا دانلود کنید، دسترسی پیدا کنید.

Codelab

پایتون 2

پایتون 3

ماژول 0

کد

(n/a)

ماژول 1

کد

(n/a)

منابع App Engine

در زیر منابع اضافی در مورد این مهاجرت خاص آمده است: