Mô-đun 3: Di chuyển từ Google Cloud NDB sang Cloud Datastore

1. Tổng quan

Loạt lớp học lập trình này (hướng dẫn thực hành theo tốc độ của riêng bạn) nhằm mục đích giúp các nhà phát triển Google App Engine (môi trường tiêu chuẩn) hiện đại hoá ứng dụng của họ bằng cách hướng dẫn họ thực hiện một loạt quy trình di chuyển. Bước quan trọng nhất là chuyển từ các dịch vụ đi kèm với thời gian chạy ban đầu sang thời gian chạy thế hệ tiếp theo vì thời gian chạy này linh hoạt hơn, mang đến cho người dùng nhiều lựa chọn dịch vụ hơn. Việc chuyển sang thời gian chạy thế hệ mới giúp bạn dễ dàng tích hợp với các sản phẩm của Google Cloud, sử dụng nhiều dịch vụ được hỗ trợ hơn và hỗ trợ các bản phát hành ngôn ngữ hiện tại.

Hướng dẫn không bắt buộc này cho thấy cách di chuyển từ Cloud NDB sang Cloud Datastore dưới dạng thư viện ứng dụng để giao tiếp với dịch vụ Datastore. Những nhà phát triển muốn dùng NDB có thể tiếp tục sử dụng vì NDB tương thích với Python 3. Đó là lý do khiến việc di chuyển này là không bắt buộc. Quá trình di chuyển này chỉ dành cho những người muốn tạo một cơ sở mã nhất quán và các thư viện dùng chung với những ứng dụng khác đã sử dụng Cloud Datastore. Điều này được giải thích trong phần "Bối cảnh".

Bạn sẽ tìm hiểu cách

  • Sử dụng Cloud NDB (nếu bạn chưa quen với công cụ này)
  • Di chuyển từ Cloud NDB sang Cloud Datastore
  • Tiếp tục di chuyển ứng dụng của bạn sang Python 3

Bạn cần có

  • Một dự án trên Google Cloud Platform có tài khoản thanh toán GCP đang hoạt động
  • Kỹ năng cơ bản về Python
  • Kiến thức cơ bản về các lệnh Linux cơ bản
  • Kiến thức cơ bản về cách phát triển và triển khai các ứng dụng App Engine
  • Một ứng dụng Module 2 App Engine 2.x hoặc 3.x đang hoạt động.

Bản khảo sát

Bạn sẽ sử dụng lớp học lập trình này như thế nào?

Chỉ đọc qua Đọc và hoàn thành bài tập

2. Thông tin khái quát

Mặc dù Cloud NDB là một giải pháp Datastore tuyệt vời cho các nhà phát triển App Engine lâu năm và giúp chuyển đổi sang Python 3, nhưng đây không phải là cách duy nhất để nhà phát triển App Engine có thể truy cập vào Datastore. Khi Datastore của App Engine trở thành sản phẩm riêng vào năm 2013, Google Cloud Datastore, một thư viện ứng dụng mới đã được tạo để tất cả người dùng đều có thể sử dụng Datastore.

Các nhà phát triển Python 3 App Engine và không phải là nhà phát triển App Engine được hướng dẫn sử dụng Cloud Datastore (không phải Cloud NDB). Các nhà phát triển App Engine Python 2 nên di chuyển từ ndb sang Cloud NDB và chuyển sang Python 3 từ đó, nhưng họ cũng có thể chọn di chuyển thêm sang Cloud Datastore. Đây là một quyết định hợp lý, đặc biệt là đối với những nhà phát triển đã có mã sử dụng Cloud Datastore (chẳng hạn như những nhà phát triển vừa đề cập) và muốn tạo các thư viện dùng chung trên tất cả ứng dụng của họ. Việc sử dụng lại mã là một phương pháp hay cũng như tính nhất quán của mã và cả hai đều góp phần giảm chi phí bảo trì tổng thể, như được tóm tắt ở đây:

Di chuyển từ Cloud NDB sang Cloud Datastore

  • Cho phép nhà phát triển tập trung vào một cơ sở mã duy nhất để truy cập vào Datastore
  • Tránh duy trì một số mã bằng Cloud NDB và một số mã khác bằng Cloud Datastore
  • Mang lại tính nhất quán cao hơn trong cơ sở mã và khả năng tái sử dụng mã tốt hơn
  • Cho phép sử dụng các thư viện phổ biến/dùng chung, giúp giảm chi phí bảo trì tổng thể

Quá trình di chuyển này có các bước chính sau:

  1. Thiết lập/Công việc chuẩn bị
  2. Thay thế Cloud NDB bằng thư viện ứng dụng Cloud Datastore
  3. Cập nhật ứng dụng

3. Thiết lập/Công việc chuẩn bị

Trước khi bắt đầu phần chính của hướng dẫn, hãy thiết lập dự án, lấy mã nguồn rồi triển khai ứng dụng cơ sở để đảm bảo chúng ta bắt đầu bằng mã nguồn hoạt động.

1. Thiết lập dự án

Nếu đã hoàn tất lớp học lập trình Mô-đun 2, bạn nên sử dụng lại chính dự án (và mã) đó. Ngoài ra, bạn có thể tạo một dự án hoàn toàn mới hoặc sử dụng lại một dự án hiện có khác. Đảm bảo dự án có một tài khoản thanh toán đang hoạt động và App Engine (ứng dụng) được bật.

2. Tải ứng dụng mẫu cơ sở

Một trong những điều kiện tiên quyết là bạn phải có một ứng dụng mẫu Module 2 đang hoạt động. Hãy sử dụng giải pháp của bạn nếu bạn đã hoàn thành hướng dẫn đó. Bạn có thể hoàn thành ngay bây giờ (đường liên kết ở trên) hoặc nếu muốn bỏ qua, hãy sao chép kho lưu trữ Phụ lục 2 (đường liên kết ở bên dưới).

Cho dù bạn dùng mã của mình hay mã của chúng tôi, mã của Mô-đun 2 sẽ là nơi chúng ta BẮT ĐẦU. Lớp học lập trình Mô-đun 3 này sẽ hướng dẫn bạn từng bước và khi hoàn tất, lớp học này sẽ giống với mã tại điểm KẾT THÚC. Hướng dẫn này có phiên bản Python 2 và 3, vì vậy, hãy lấy kho lưu trữ mã chính xác bên dưới.

Python 2

Thư mục của các tệp BẮT ĐẦU Python 2 Module 2 (của bạn hoặc của chúng tôi) sẽ có dạng như sau:

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

Nếu đã hoàn thành hướng dẫn về Mô-đun 2, bạn cũng sẽ có một thư mục lib có Flask và các phần phụ thuộc của nó. Nếu bạn chưa có thư mục lib, hãy tạo thư mục này bằng lệnh pip install -t lib -r requirements.txt để chúng ta có thể triển khai ứng dụng cơ sở này ở bước tiếp theo. Nếu đã cài đặt cả Python 2 và 3, bạn nên sử dụng pip2 thay vì pip để tránh nhầm lẫn với Python 3.

Python 3

Thư mục của các tệp BẮT ĐẦU Mô-đun 2 Python 3 (của bạn hoặc của chúng tôi) sẽ có dạng như sau:

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

Cả libappengine_config.py đều không được dùng cho Python 3.

3. (Triển khai lại) Ứng dụng Mô-đun 2

Các bước chuẩn bị còn lại mà bạn cần thực hiện ngay:

  1. Làm quen lại với công cụ dòng lệnh gcloud (nếu cần).
  2. (Triển khai lại) mã Mô-đun 1 vào App Engine (nếu cần)

Sau khi bạn thực hiện thành công các bước đó và xác nhận rằng các bước đó đang hoạt động, chúng ta sẽ tiếp tục trong hướng dẫn này, bắt đầu bằng các tệp cấu hình.

4. Thay thế Cloud NDB bằng thư viện ứng dụng Cloud Datastore

Thay đổi cấu hình duy nhất là một lần hoán đổi gói nhỏ trong tệp requirements.txt của bạn.

1. Cập nhật requirements.txt

Sau khi hoàn tất Mô-đun 2, tệp requirements.txt của bạn sẽ có dạng như sau:

  • TRƯỚC (Python 2 và 3):
Flask==1.1.2
google-cloud-ndb==1.7.1

Cập nhật requirements.txt bằng cách thay thế thư viện Cloud NDB (google-cloud-ndb) bằng phiên bản mới nhất của thư viện Cloud Datastore (google-cloud-datastore), giữ nguyên mục nhập cho Flask, lưu ý rằng phiên bản cuối cùng của Cloud Datastore tương thích với Python 2 là 1.15.3:

  • SAU (Python 2):
Flask==1.1.2
google-cloud-datastore==1.15.3
  • SAU (Python 3):
Flask==1.1.2
google-cloud-datastore==2.1.0

Xin lưu ý rằng kho lưu trữ được duy trì thường xuyên hơn so với hướng dẫn này, vì vậy, có thể tệp requirements.txt sẽ phản ánh các phiên bản mới hơn. Bạn nên sử dụng phiên bản mới nhất của từng thư viện, nhưng nếu các phiên bản này không hoạt động, bạn có thể quay lại một bản phát hành cũ hơn. Các số phiên bản ở trên là phiên bản mới nhất khi lớp học lập trình này được cập nhật lần gần đây nhất.

2. Các tệp cấu hình khác

Các tệp cấu hình khác, app.yamlappengine_config.py, sẽ không thay đổi so với bước di chuyển trước:

  • app.yaml phải (vẫn) tham chiếu đến các gói đi kèm của bên thứ ba grpciosetuptools.
  • appengine_config.py (vẫn) phải trỏ pkg_resourcesgoogle.appengine.ext.vendor đến các tài nguyên của bên thứ ba trong lib.

Bây giờ, hãy chuyển sang các tệp ứng dụng.

5. Cập nhật tệp ứng dụng

template/index.html không có gì thay đổi, nhưng main.py có một số điểm cập nhật.

1. Nhập

Mã bắt đầu cho phần nhập sẽ có dạng như sau:

  • TRƯỚC KHI:
from flask import Flask, render_template, request
from google.cloud import ndb

Thay thế lệnh nhập google.cloud.ndb bằng một lệnh nhập cho Cloud Datastore: google.cloud.datastore. Vì thư viện ứng dụng Datastore không hỗ trợ việc tự động tạo trường dấu thời gian trong một Thực thể, nên bạn cũng cần nhập mô-đun thư viện chuẩn datetime để tạo một trường theo cách thủ công. Theo quy ước, các lệnh nhập thư viện chuẩn sẽ nằm phía trên các lệnh nhập gói của bên thứ ba. Sau khi bạn hoàn tất những thay đổi này, mã sẽ có dạng như sau:

  • SAU:
from datetime import datetime
from flask import Flask, render_template, request
from google.cloud import datastore

2. Khởi tạo và mô hình dữ liệu

Sau khi khởi chạy Flask, ứng dụng mẫu trong Mô-đun 2 sẽ tạo một lớp mô hình dữ liệu NDB và các trường của lớp đó có dạng như sau:

  • TRƯỚC KHI:
app = Flask(__name__)
ds_client = ndb.Client()

class Visit(ndb.Model):
    visitor   = ndb.StringProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

Thư viện Cloud Datastore không có lớp như vậy, vì vậy, hãy xoá khai báo lớp Visit. Bạn vẫn cần một ứng dụng để trao đổi với Datastore, vì vậy hãy thay đổi ndb.Client() thành datastore.Client(). Thư viện Datastore "linh hoạt" hơn, cho phép bạn tạo các Thực thể mà không cần "khai báo trước" cấu trúc của chúng như NDB. Sau khi cập nhật, phần này của main.py sẽ có dạng như sau:

  • SAU:
app = Flask(__name__)
ds_client = datastore.Client()

3. Quyền truy cập vào Datastore

Việc di chuyển sang Cloud Datastore đòi hỏi bạn phải thay đổi cách tạo, lưu trữ và truy vấn các thực thể Datastore (ở cấp người dùng). Đối với các ứng dụng của bạn, mức độ khó của quá trình di chuyển này phụ thuộc vào độ phức tạp của mã Datastore. Trong ứng dụng mẫu của chúng tôi, chúng tôi đã cố gắng thực hiện quy trình cập nhật đơn giản nhất có thể. Sau đây là mã khởi đầu của chúng tôi:

  • TRƯỚC KHI:
def store_visit(remote_addr, user_agent):
    with ds_client.context():
        Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    with ds_client.context():
        return (v.to_dict() for v in Visit.query().order(
                -Visit.timestamp).fetch_page(limit)[0])

Với Cloud Datastore, hãy tạo một thực thể chung, xác định các đối tượng được nhóm trong Thực thể bằng một "khoá". Tạo bản ghi dữ liệu bằng một đối tượng JSON (Python dict) gồm các cặp khoá-giá trị, sau đó ghi bản ghi đó vào Datastore bằng put() dự kiến. Việc truy vấn tương tự nhưng đơn giản hơn với Datastore. Tại đây, bạn có thể thấy sự khác biệt giữa mã Datastore tương đương:

  • SAU:
def store_visit(remote_addr, user_agent):
    entity = datastore.Entity(key=ds_client.key('Visit'))
    entity.update({
        'timestamp': datetime.now(),
        'visitor': '{}: {}'.format(remote_addr, user_agent),
    })
    ds_client.put(entity)

def fetch_visits(limit):
    query = ds_client.query(kind='Visit')
    query.order = ['-timestamp']
    return query.fetch(limit=limit)

Cập nhật phần nội dung hàm cho store_visit()fetch_visits() như trên, giữ nguyên chữ ký của các hàm này so với phiên bản trước. Không có thay đổi nào đối với trình xử lý chính root(). Sau khi hoàn tất các thay đổi này, ứng dụng của bạn hiện đã được trang bị để sử dụng Cloud Datastore và sẵn sàng kiểm thử.

6. Tóm tắt/Dọn dẹp

Triển khai ứng dụng

Triển khai lại ứng dụng bằng gcloud app deploy và xác nhận rằng ứng dụng hoạt động. Giờ đây, mã của bạn sẽ khớp với mã trong các thư mục của kho lưu trữ Mô-đun 3:

Nếu bạn bắt đầu tham gia loạt bài này mà chưa thực hiện bất kỳ lớp học lập trình nào trước đó, thì bản thân ứng dụng sẽ không thay đổi; ứng dụng này sẽ đăng ký tất cả lượt truy cập vào trang web chính (/) và trông như thế này sau khi bạn truy cập vào trang web đủ số lần:

ứng dụng visitme

Chúc mừng bạn đã hoàn thành lớp học lập trình về Mô-đun 3 này. Giờ đây, bạn đã biết rằng bạn có thể sử dụng cả thư viện ứng dụng Cloud NDB Cloud Datastore để truy cập vào Datastore. Bằng cách di chuyển sang thư viện sau, giờ đây, bạn có thể tận hưởng những lợi ích của thư viện dùng chung, mã chung và khả năng sử dụng lại mã để đảm bảo tính nhất quán và giảm chi phí bảo trì.

Không bắt buộc: Dọn dẹp

Bạn có thể dọn dẹp để tránh bị tính phí cho đến khi sẵn sàng chuyển sang lớp học lập trình di chuyển tiếp theo. Là nhà phát triển hiện tại, có thể bạn đã nắm được thông tin về giá của App Engine.

Không bắt buộc: Tắt ứng dụng

Nếu bạn chưa sẵn sàng chuyển sang hướng dẫn tiếp theo, hãy tắt ứng dụng để không bị tính phí. Khi đã sẵn sàng chuyển sang lớp học lập trình tiếp theo, bạn có thể bật lại tính năng này. Khi ứng dụng của bạn bị vô hiệu hoá, ứng dụng sẽ không nhận được lưu lượng truy cập nào để phát sinh phí. Tuy nhiên, một khoản phí khác mà bạn có thể phải trả là mức sử dụng Datastore nếu mức này vượt quá hạn mức miễn phí. Vì vậy, hãy xoá đủ để giảm xuống dưới hạn mức đó.

Mặt khác, nếu không muốn tiếp tục di chuyển và muốn xoá hoàn toàn mọi thứ, bạn có thể tắt dự án.

Các bước tiếp theo

Tại đây, bạn có thể khám phá các mô-đun di chuyển tiếp theo này:

  • Phụ lục 3 Phần thưởng: Tiếp tục đến phần thưởng để tìm hiểu cách quy trình chuyển đổi sang Python 3 và thời gian chạy App Engine thế hệ tiếp theo.
  • Module 7: App Engine Push Task Queues (bắt buộc nếu bạn sử dụng Task Queues [push])
    • Thêm các tác vụ đẩy taskqueue của App Engine vào ứng dụng Mô-đun 1
    • Chuẩn bị cho người dùng di chuyển sang Cloud Tasks trong Mô-đun 8
  • Mô-đun 4: Di chuyển sang Cloud Run bằng Docker
    • Đóng gói ứng dụng của bạn vào vùng chứa để chạy trên Cloud Run bằng Docker
    • Cho phép bạn tiếp tục sử dụng Python 2
  • Module 5: Di chuyển sang Cloud Run bằng Cloud Buildpacks
    • Tạo vùng chứa cho ứng dụng để chạy trên Cloud Run bằng Cloud Buildpacks
    • Không cần biết bất cứ điều gì về Docker, vùng chứa hoặc Dockerfile
    • Bạn phải di chuyển ứng dụng sang Python 3
  • Module 6: Di chuyển sang Cloud Firestore
    • Di chuyển sang Cloud Firestore để sử dụng các tính năng của Firebase
    • Mặc dù Cloud Firestore hỗ trợ Python 2, nhưng lớp học lập trình này chỉ có trong Python 3.

7. THƯỞNG: Di chuyển sang Python 3

Để truy cập vào thời gian chạy và các tính năng mới nhất của App Engine, bạn nên di chuyển sang Python 3. Trong ứng dụng mẫu của chúng tôi, Datastore là dịch vụ tích hợp duy nhất mà chúng tôi đã sử dụng. Vì đã di chuyển từ ndb sang Cloud NDB, nên giờ đây, chúng tôi có thể chuyển sang thời gian chạy Python 3 của App Engine.

Tổng quan

Mặc dù quy trình chuyển đổi sang Python 3 không nằm trong phạm vi hướng dẫn của Google Cloud, nhưng phần này của lớp học lập trình sẽ giúp nhà phát triển hiểu được sự khác biệt giữa thời gian chạy App Engine Python 3. Một tính năng nổi bật của thời gian chạy thế hệ tiếp theo là đơn giản hoá quyền truy cập vào các gói bên thứ ba: Bạn không cần chỉ định các gói tích hợp trong app.yaml cũng như không cần sao chép hoặc tải các thư viện không tích hợp lên; các thư viện này sẽ được cài đặt ngầm từ danh sách trong requirements.txt.

Vì mẫu của chúng tôi rất cơ bản Cloud Datastore tương thích với Python 2-3, nên không cần chuyển mã xử lý ứng dụng một cách rõ ràng sang 3.x: Ứng dụng chạy trên 2.x và 3.x mà không bị sửa đổi, nghĩa là trong trường hợp này, bạn chỉ cần thay đổi cấu hình:

  1. Đơn giản hoá app.yaml để tham chiếu Python 3 và xoá tham chiếu đến các thư viện đi kèm của bên thứ ba.
  2. Xoá appengine_config.py và thư mục lib vì chúng không còn cần thiết nữa.

Các tệp ứng dụng main.pytemplates/index.html vẫn giữ nguyên.

Cập nhật requirements.txt

Phiên bản cuối cùng của Cloud Datastore hỗ trợ Python 2 là 1.15.3. Cập nhật requirements.txt bằng phiên bản mới nhất cho Python 3 (có thể mới hơn vào thời điểm này). Khi hướng dẫn này được viết, phiên bản mới nhất là 2.1.0, vì vậy, hãy chỉnh sửa dòng đó để có dạng như sau (hoặc bất kỳ phiên bản mới nhất nào):

google-cloud-datastore==2.1.0

Đơn giản hoá app.yaml

TRƯỚC KHI:

Thay đổi thực sự duy nhất đối với ứng dụng mẫu này là rút ngắn đáng kể app.yaml. Để bạn tiện theo dõi, sau đây là những gì chúng ta đã có trong app.yaml khi kết thúc Mô-đun 3:

runtime: python27
threadsafe: yes
api_version: 1

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

libraries:
- name: grpcio
  version: 1.0.0
- name: setuptools
  version: 36.6.0

SAU:

Trong Python 3, các chỉ thị threadsafe, api_versionlibraries đều ngừng hoạt động; tất cả ứng dụng đều được giả định là an toàn cho luồng và api_version không được dùng trong Python 3. Các dịch vụ App Engine không còn cài đặt sẵn các gói bên thứ ba tích hợp, vì vậy libraries cũng không được dùng nữa. Hãy xem tài liệu về các thay đổi đối với app.yaml để biết thêm thông tin về những thay đổi này. Do đó, bạn nên xoá cả 3 phiên bản này khỏi app.yaml và cập nhật lên phiên bản Python 3 được hỗ trợ (xem bên dưới).

Không bắt buộc: Sử dụng chỉ thị handlers

Ngoài ra, chỉ thị handlers (chuyển hướng lưu lượng truy cập tại các ứng dụng App Engine) cũng không được dùng nữa. Vì thời gian chạy thế hệ tiếp theo yêu cầu các khung web quản lý việc định tuyến ứng dụng, nên bạn phải thay đổi tất cả "tập lệnh trình xử lý" thành "auto". Khi kết hợp các thay đổi ở trên, bạn sẽ có được app.yaml sau đây:

runtime: python38

handlers:
- url: /.*
  script: auto

Tìm hiểu thêm về script: auto trên trang tham khảo về app.yaml.

Xoá chỉ thị handlers

handlers không được dùng nữa, bạn cũng có thể xoá toàn bộ phần này, chỉ để lại app.yaml trên một dòng:

runtime: python38

Theo mặc định, thao tác này sẽ khởi chạy máy chủ web WSGI Gunicorn có sẵn cho tất cả các ứng dụng. Nếu bạn đã quen với gunicorn, thì đây là lệnh được thực thi khi lệnh này được khởi động theo mặc định bằng app.yaml cơ bản:

gunicorn main:app --workers 2 -c /config/gunicorn.py

Không bắt buộc: Sử dụng chỉ thị entrypoint

Tuy nhiên, nếu ứng dụng của bạn yêu cầu một lệnh khởi động cụ thể, thì bạn có thể chỉ định lệnh đó bằng chỉ thị entrypoint, dẫn đến app.yaml có dạng như sau:

runtime: python38
entrypoint: python main.py

Ví dụ này yêu cầu cụ thể sử dụng máy chủ phát triển Flask thay vì gunicorn. Bạn cũng phải thêm mã khởi động máy chủ phát triển vào ứng dụng để khởi chạy trên giao diện 0.0.0.0 trên cổng 8080 bằng cách thêm phần nhỏ này vào cuối main.py:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

Tìm hiểu thêm về entrypoint trên trang tham khảo về app.yaml. Bạn có thể xem thêm ví dụ và các phương pháp hay nhất trong tài liệu khởi động môi trường tiêu chuẩn của App Engine cũng như tài liệu khởi động môi trường linh hoạt của App Engine.

Xoá appengine_config.pylib

Xoá tệp appengine_config.py và thư mục lib. Khi di chuyển sang Python 3, App Engine sẽ nhận và cài đặt các gói có trong requirements.txt.

Tệp cấu hình appengine_config.py được dùng để nhận dạng các thư viện/gói của bên thứ ba, cho dù bạn tự sao chép chúng hay sử dụng những thư viện/gói đã có trên máy chủ App Engine (được tích hợp sẵn). Khi chuyển sang Python 3, bạn cần lưu ý những thay đổi lớn sau đây:

  1. Không được kết hợp các thư viện của bên thứ ba đã sao chép (được liệt kê trong requirements.txt)
  2. Không có pip install nào trong thư mục lib, tức là không có thư mục lib nào
  3. Không có thư viện tích hợp sẵn của bên thứ ba trong app.yaml
  4. Không cần tham chiếu ứng dụng đến các thư viện bên thứ ba, nên không có tệp appengine_config.py

Bạn chỉ cần liệt kê tất cả các thư viện bắt buộc của bên thứ ba trong requirements.txt.

Triển khai ứng dụng

Triển khai lại ứng dụng để đảm bảo ứng dụng hoạt động. Bạn cũng có thể xác nhận mức độ gần giống giữa giải pháp của bạn với mã Python 3 mẫu của Mô-đun 3. Để hình dung sự khác biệt với Python 2, hãy so sánh mã với phiên bản Python 2 của mã đó.

Chúc mừng bạn đã hoàn thành bước thưởng trong Mô-đun 3! Hãy xem tài liệu về cách chuẩn bị tệp cấu hình cho thời gian chạy Python 3. Cuối cùng, hãy xem lại phần tóm tắt ở trên để biết các bước tiếp theo và cách dọn dẹp.

Chuẩn bị đơn đăng ký của bạn

Khi đến thời điểm di chuyển ứng dụng của bạn, bạn sẽ phải chuyển main.py và các tệp ứng dụng khác sang phiên bản 3.x. Vì vậy, phương pháp hay nhất là cố gắng hết sức để ứng dụng 2.x của bạn có khả năng "tương thích về sau" càng nhiều càng tốt.

Có rất nhiều tài nguyên trực tuyến giúp bạn thực hiện việc đó, nhưng một số mẹo chính là:

  1. Đảm bảo tất cả các phần phụ thuộc của ứng dụng đều hoàn toàn tương thích với phiên bản 3.x
  2. Đảm bảo ứng dụng của bạn chạy trên phiên bản ít nhất là 2.6 (tốt nhất là 2.7)
  3. Đảm bảo ứng dụng vượt qua toàn bộ bộ kiểm thử (và có độ bao phủ tối thiểu là 80%)
  4. Sử dụng các thư viện tương thích như six, Future và/hoặc Modernize
  5. Tìm hiểu về những điểm khác biệt chính giữa phiên bản 2.x và 3.x không tương thích ngược
  6. Mọi hoạt động I/O đều có thể dẫn đến sự không tương thích giữa Unicode và chuỗi byte

Ứng dụng mẫu được thiết kế với tất cả những điều này trong tâm trí, do đó, ứng dụng chạy trên 2.x và 3.x ngay khi xuất xưởng để chúng ta có thể tập trung vào việc cho bạn thấy những gì cần thay đổi để sử dụng nền tảng thế hệ tiếp theo.

8. Tài nguyên khác

Vấn đề/ý kiến phản hồi về lớp học lập trình mô-đun di chuyển App Engine

Nếu bạn gặp vấn đề với lớp học lập trình này, vui lòng tìm kiếm vấn đề của bạn trước khi báo cáo. Đường liên kết để tìm kiếm và tạo vấn đề mới:

Tài nguyên di chuyển

Bạn có thể tìm thấy đường liên kết đến các thư mục kho lưu trữ cho Mô-đun 2 (BẮT ĐẦU) và Mô-đun 3 (KẾT THÚC) trong bảng bên dưới. Bạn cũng có thể truy cập vào kho lưu trữ cho tất cả các hoạt động di chuyển App Engine mà bạn có thể sao chép hoặc tải tệp ZIP xuống.

Lớp học lập trình

Python 2

Python 3

Mô-đun 2

code

code

Module 3

code

code

Tài nguyên App Engine

Dưới đây là các tài nguyên khác liên quan đến quá trình di chuyển cụ thể này: