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 tiến độ riêng) nhằm 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à ngừng sử dụng các dịch vụ thời gian chạy ban đầu đi kèm vì môi trường thời gian chạy thế hệ mới linh hoạt hơn, mang đến cho người dùng nhiều lựa chọn dịch vụ hơn. Khi chuyển sang môi trường thời gian chạy thế hệ mới hơn, bạn có thể tích hợp dễ dàng hơn 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 chỉ cho các nhà phát triển cách di chuyển từ Cloud NDB sang Cloud Datastore dưới dạng thư viện ứng dụng để trao đổi với dịch vụ Datastore. Các nhà phát triển ưa dùng NDB có thể tiếp tục sử dụng NDB vì nó tương thích với Python 3, đó là lý do 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 ai muốn xây dựng cơ sở mã nhất quán và thư viện dùng chung với các ứng dụng khác đã sử dụng Cloud Datastore. Điều này được giải thích trong phần "Thông tin cơ bản" .
Bạn sẽ tìm hiểu cách
- Sử dụng Cloud NDB (nếu bạn không quen dùng)
- Di chuyển từ Cloud NDB sang Cloud Datastore
- Tiếp tục di chuyển ứng dụng sang Python 3
Bạn cần có
- Một dự án Google Cloud Platform có tài khoản thanh toán GCP đang hoạt động
- Kỹ năng Python cơ bản
- Có kiến thức thực hành 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 App Engine 2.x hoặc 3.x đang hoạt động.
Khảo sát
Bạn sẽ sử dụng lớp học lập trình này như thế nào?
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 dành 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 đó không phải là cách duy nhất để các 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 của riêng mình 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 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 Python 2 App Engine 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 đối với các nhà phát triển đã có mã sử dụng Cloud Datastore, chẳng hạn như các công cụ vừa được đề cập và muốn tạo thư viện dùng chung trên tất cả các ứng dụng của họ. Sử dụng lại mã là một phương pháp hay nhất vì tính nhất quán của mã và cả hai đều góp phần giúp giảm chi phí duy trì tổng thể, như tóm tắt dưới đây:
Di chuyển từ Cloud NDB sang Cloud Datastore
- Cho phép các 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 phải duy trì một số mã bằng Cloud NDB và các mã khác bằng Cloud Datastore
- Mang lại tính nhất quán hơn cho cơ sở mã và khả năng sử dụng lại mã tốt hơn
- Cho phép sử dụng thư viện chung/thư viện dùng chung, góp phần giảm chi phí bảo trì tổng thể
Quá trình di chuyển này bao gồm các bước chính sau:
- Thiết lập/Chuẩn bị
- Thay thế Cloud NDB bằng các thư viện ứng dụng Cloud Datastore
- Cập nhật ứng dụng
3. Thiết lập/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ã, sau đó triển khai ứng dụng cơ sở để biết rằng mình đã bắt đầu làm việc với mã nguồn.
1. Thiết lập dự án
Nếu đã hoàn thành Lớp học lập trình về Mô-đun 2, bạn nên sử dụng lại chính dự án (và mã nguồn). 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. Hãy đảm bảo dự án này có một tài khoản thanh toán đang hoạt động và đã bật App Engine (ứng dụng).
2. Tải ứng dụng mẫu cơ sở
Một trong những điều kiện tiên quyết là phải có ứng dụng mẫu Mô-đun 2 hoạt động. Sử dụng giải pháp của bạn nếu bạn đã xem hết phần 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ữ Mô-đun 2 (đường liên kết bên dưới).
Cho dù bạn sử dụng mã của bạn hay mã của chúng tôi, mã Mô-đun 2 là nơi chúng ta sẽ BẮT ĐẦU. Lớp học lập trình của Mô-đun 3 này sẽ hướng dẫn bạn qua từng bước và khi hoàn tất, nó sẽ giống với đoạn mã ở điểm Khiêm tốn. Hướng dẫn này có cá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
- START: Mã mô-đun 2
- HOÀN TẤT: Mã mô-đun 3
- Toàn bộ kho lưu trữ (để sao chép hoặc tải tệp ZIP xuống)
Thư mục của các tệp KHỞI ĐỘNG Mô-đun 2 Python 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 tất hướng dẫn cho Mô-đun 2, bạn cũng sẽ có một thư mục lib
chứa Flask và các phần phụ thuộc của nó. Nếu bạn không 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 trong 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
- BẮT ĐẦU: Kho lưu trữ mô-đun 2
- HOÀN TẤT: Kho lưu trữ mô-đun 3
- Toàn bộ kho lưu trữ (để sao chép hoặc tải tệp ZIP xuống)
Thư mục của các tệp KHỞI ĐỘNG 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ả lib
và appengine_config.py
đều không được sử 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 để thực hiện ngay:
- Làm quen lại bằng công cụ dòng lệnh
gcloud
(nếu cần). - (Triển khai lại mã Mô-đun 1 cho 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 mô hình đã hoạt động, chúng tôi sẽ chuyển sang phần hướng dẫn này, bắt đầu với các tệp cấu hình.
4. Thay thế Cloud NDB bằng các thư viện ứng dụng Cloud Datastore
Thay đổi duy nhất về cấu hình là một hoán đổi gói nhỏ trong tệp requirements.txt
.
1. Cập nhật requirements.txt
Sau khi hoàn thành Mô-đun 2, tệp requirements.txt
của bạn sẽ có dạng như sau:
- TRƯỚC KHI (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ữ này được duy trì thường xuyên hơn so với hướng dẫn này, vì vậy, tệp requirements.txt
có thể phản ánh các phiên bản mới hơn. Bạn nên sử dụng các phiên bản mới nhất của mỗi thư viện. Tuy nhiên, nếu các phiên bản đó không hoạt động, bạn có thể khôi phục về bản phát hành cũ. Số phiên bản ở trên là số 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.yaml
và appengine_config.py
, không được thay đổi so với bước di chuyển trước đó:
app.yaml
phải (vẫn) tham chiếu các gói theo gói của bên thứ bagrpcio
vàsetuptools
.appengine_config.py
sẽ (vẫn) trỏpkg_resources
vàgoogle.appengine.ext.vendor
đến các tài nguyên của bên thứ ba tronglib
.
Giờ hãy chuyển đến các tệp ứng dụng.
5. Cập nhật tệp ứng dụng
Không có thay đổi nào đối với template/index.html
, nhưng có một vài bản cập nhật cho main.py
.
1. Nhập
Đoạn mã khởi đầ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ợ tính năng tự động tạo trường dấu thời gian trong Thực thể, bạn cũng nên nhập mô-đun datetime
của thư viện chuẩn để tạo một trường theo cách thủ công. Theo quy ước, dữ liệu nhập vào thư viện chuẩn cao hơn dữ liệu nhập gói của bên thứ ba. Khi bạn hoàn tất những thay đổi này, các thay đổi 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 động Flask, ứng dụng mẫu 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 đó 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á phần khai báo lớp Visit
. Bạn vẫn cần có một ứng dụng để giao tiếp 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 Thực thể mà không cần "khai báo trước" cấu trúc của chúng như NDB. Sau lần cập nhật này, 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 kho dữ liệu
Để di chuyển sang Cloud Datastore, bạn phải thay đổi cách tạo, lưu trữ và truy vấn các dữ liệu trong Datastore (ở cấp người dùng). Đối với các ứng dụng của bạn, độ khó của quá trình di chuyển này phụ thuộc vào độ phức tạp của mã Datastore của bạn. Trong ứng dụng mẫu, chúng tôi đã cố gắng làm cho quá trình cập nhật trở nên đơn giản nhất có thể. Dưới đây là mã khởi đầu của chúng ta:
- 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ể của bạn bằng một "khoá". Tạo bản ghi dữ liệu bằng một đối tượng JSON (Python dict
) của 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 cũng tương tự nhưng đơn giản hơn với Datastore. Ở đây, bạn có thể thấy sự khác biệt củ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()
và fetch_visits()
như trên, giữ cho chữ ký của các hàm này giống 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 những thay đổi này, ứng dụng của bạ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 bình thường. Mã của bạn bây giờ sẽ khớp với nội dung trong thư mục kho lưu trữ Mô-đun 3:
Nếu bạn đã xem loạt video này mà không thực hiện bất kỳ lớp học lập trình nào trước đó thì ứng dụng sẽ không thay đổi; trang này sẽ ghi lại tất cả lượt truy cập vào trang web chính (/
) và có dạng như sau khi bạn đã truy cập đủ số lần vào trang web:
Chúc mừng bạn đã hoàn thành lớp học lập trình Học phần 3 này. Giờ đây, bạn đã biết rằng mình có thể sử dụng cả thư viện ứng dụng Cloud NDB và Cloud Datastore để truy cập vào Datastore. Giờ đây, khi chuyển sang thư viện chia sẻ, bạn có thể tận hưởng các lợi ích như thư viện dùng chung, mã dùng chung và mã tái sử dụng để đảm bảo tính nhất quán cũng như giảm chi phí bảo trì.
Không bắt buộc: Dọn dẹp
Còn việc dọn dẹp để tránh bị tính phí cho đến khi bạn sẵn sàng chuyển sang lớp học lập trình di chuyển tiếp theo thì sao? Là nhà phát triển hiện tại, có thể bạn đã nắm bắt đượ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 đến hướng dẫn tiếp theo, hãy vô hiệu hoá ứng dụng để tránh phát sinh 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 lớp học này. Mặc dù bị vô hiệu hoá, ứng dụng của bạn sẽ không nhận được bất kỳ lưu lượng truy cập nào để bị tính phí. Tuy nhiên, một điều khác bạn có thể bị tính phí là mức sử dụng Datastore nếu vượt quá hạn mức miễn phí, vì vậy, hãy xoá đủ để nằm trong giới hạn đó.
Mặt khác, nếu không định tiếp tục quá trình di chuyển và muốn xoá hoàn toàn mọi thứ, thì bạn có thể ngừng cung cấp dự án của mình.
Các bước tiếp theo
Từ đây, vui lòng khám phá các mô-đun di chuyển tiếp theo sau đây:
- Phần thưởng cho mô-đun 3: Tiếp tục chuyển đến phần phần thưởng để tìm hiểu cách chuyển đổi sang Python 3 và thời gian chạy App Engine thế hệ mới.
- Mô-đun 7: Hàng đợi tác vụ đẩy của App Engine (bắt buộc nếu bạn sử dụng Hàng đợi tác vụ [push])
- Thêm các tác vụ đẩy
taskqueue
của App Engine vào ứng dụng Mô-đun 1 - Giúp người dùng chuẩn bị để di chuyển sang Cloud Tasks trong Mô-đun 8
- Thêm các tác vụ đẩy
- Học phần 4: Di chuyển sang Cloud Run bằng Docker
- Trong vùng chứa để ứng dụng chạy trên Cloud Run bằng Docker
- Cho phép bạn ở lại Python 2
- Học phần 5: Di chuyển sang Cloud Run bằng các gói bản dựng trên đám mây
- Trong vùng chứa của ứng dụng để chạy trên Cloud Run bằng Cloud Buildpacks
- Không cần biết gì về Docker, vùng chứa hoặc
Dockerfile
- Yêu cầu bạn phải di chuyển ứng dụng của mình sang Python 3
- Học phần 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ỉ dùng được với Python 3.
7. THƯỞNG: Di chuyển sang Python 3
Để tiếp cận các tính năng và thời gian chạy mới nhất của App Engine, bạn nên chuyển sang Python 3. Trong ứng dụng mẫu của mình, 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 ta có thể chuyển sang môi trường 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 thuộc phạm vi của hướng dẫn về 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 nắm được sự khác biệt giữa thời gian chạy Python 3 App Engine. Một tính năng nổi bật của môi trường thời gian chạy thế hệ tiếp theo là quyền truy cập đơn giản vào các gói của bên thứ ba: Không cần chỉ định các gói tích hợp trong app.yaml
cũng như không yêu cầu sao chép hay tải lên các thư viện tích hợp không; chúng sẽ được ngầm cài đặt từ danh sách requirements.txt
.
Vì mẫu của chúng ta rất cơ bản và Cloud Datastore tương thích với Python 2-3, nên bạn không cần chuyển mã xử lý ứng dụng sang 3.x một cách rõ ràng: Ứng dụng chạy trên 2.x và 3.x chưa bị sửa đổi, nghĩa là chỉ có các thay đổi bắt buộc có trong cấu hình trong trường hợp này:
- Đơn giản hoá
app.yaml
để tham chiếu đến Python 3 và xoá tệp tham chiếu đến các thư viện bên thứ ba đi kèm. - Xoá
appengine_config.py
và thư mụclib
vì chúng không còn cần thiết nữa.
Các tệp ứng dụng main.py
và templates/index.html
vẫn không thay đổi.
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 ngay bây giờ). 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 đó để trông như thế này (hoặc phiên bản mới nhất là bất kỳ phiên bản nào):
google-cloud-datastore==2.1.0
Rút gọn 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
. Xin lưu ý rằng dưới đây là nội dung chúng tôi có trong app.yaml
ở phần kết của Phụ lục 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 lệnh threadsafe
, api_version
và libraries
không còn được dùng nữa; tất cả ứng dụng đều được giả định là luồng an toàn và api_version
không được dùng trong Python 3. Các gói tích hợp sẵn của bên thứ ba không còn được cài đặt trước trên các dịch vụ của App Engine nữa, 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ả ba tệp khỏi app.yaml
và cập nhật lên một phiên bản Python 3 được hỗ trợ (xem bên dưới).
Không bắt buộc: Sử dụng lệnh handlers
Ngoài ra, lệnh handlers
hướng lưu lượng truy cập vào 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 tất cả "tập lệnh trình xử lý" phải được thay đổi thành "auto
". Kết hợp các thay đổi ở trên, bạn sẽ có được app.yaml
này:
runtime: python38
handlers:
- url: /.*
script: auto
Tìm hiểu thêm về script: auto
từ trang tham khảo app.yaml
.
Đang xoá lệnh handlers
Vì handlers
không được dùng nữa nên bạn cũng có thể xoá toàn bộ phần đó và để lại một dòng đơn app.yaml
:
runtime: python38
Theo mặc định, thao tác này sẽ khởi chạy máy chủ web Gunicorn WSGI có sẵn cho tất cả các ứng dụng. Nếu bạn đã quen thuộc với gunicorn
, thì đây là lệnh được thực thi khi lệnh này khởi động theo mặc định bằng cơ chế app.yaml
:
gunicorn main:app --workers 2 -c /config/gunicorn.py
Không bắt buộc: Sử dụng lệnh entrypoint
Tuy nhiên, nếu ứng dụng của bạn đòi hỏi một lệnh khởi động cụ thể, lệnh đó có thể được chỉ định bằng lệnh entrypoint
, dẫn đến app.yaml
có dạng như sau:
runtime: python38
entrypoint: python main.py
Ví dụ này cụ thể yêu cầu 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 để 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
từ trang tham khảo app.yaml
. Bạn có thể xem thêm các ví dụ và phương pháp hay nhất trong tài liệu về quá trình khởi động theo môi trường tiêu chuẩn của App Engine cũng như tài liệu về quá trình khởi động môi trường linh hoạt của App Engine.
Xoá appengine_config.py
và lib
Xoá tệp appengine_config.py
và thư mục lib
. Trong quá trình chuyển sang Python 3, App Engine sẽ thu thập và cài đặt các gói được liệt kê trong requirements.txt
.
Tệp cấu hình appengine_config.py
được dùng để nhận dạng thư viện/gói của bên thứ ba, cho dù bạn là người tự sao chép hay sử dụng những thư viện/gói có sẵn trên máy chủ App Engine (tích hợp sẵn). Khi chuyển sang Python 3, bản tóm tắt những thay đổi lớn là:
- Không nhóm các thư viện bên thứ ba đã sao chép (liệt kê trong
requirements.txt
) - Không có
pip install
trong thư mụclib
, nghĩa là không có khoảng thời gian của thư mụclib
- Không có thư viện bên thứ ba nào được tích hợp sẵn trong
app.yaml
- Không cần tham chiếu ứng dụng đến thư viện bên thứ ba, vì vậy, sẽ không có tệp
appengine_config.py
Liệt kê tất cả thư viện bắt buộc của bên thứ ba trong requirements.txt
là tất cả những gì cần thiết.
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 độ chính xác của giải pháp của mình với mã Python 3 mẫu của Mô-đun 3. Để trực quan hoá sự khác biệt với Python 2, hãy so sánh mã với phiên bản Python 2.
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 môi trường thời gian chạy Python 3. Cuối cùng, hãy xem lại thông tin tóm tắt trước đó ở trên để biết các bước tiếp theo và cách xoá.
Đang chuẩn bị đơn đăng ký của bạn
Khi đến lúc 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 3.x. Vì vậy, phương pháp hay nhất là cố gắng hết sức để đặt ứng dụng 2.x ở chế độ "tương thích với phương thức chuyển tiếp" nhất có thể.
Có rất nhiều tài nguyên trực tuyến để giúp bạn đạt được điều đó, nhưng một số mẹo chính sau đây:
- Đảm bảo tất cả phần phụ thuộc của ứng dụng đều hoàn toàn tương thích với định dạng 3.x
- Đảm bảo ứng dụng của bạn chạy trên phiên bản 2.6 trở lên (tốt nhất là 2.7)
- Đảm bảo ứng dụng vượt qua toàn bộ bộ kiểm thử (và mức độ phù hợp tối thiểu là 80%)
- Sử dụng các thư viện tương thích như
six
, Future và/hoặc Modernize - Tự tìm hiểu về những điểm khác biệt quan trọng giữa phiên bản 2.x và 3.x không tương thích ngược
- Mọi I/O đều có thể dẫn đến sự không tương thích giữa chuỗi Unicode và chuỗi byte
Ứng dụng mẫu được thiết kế với tất cả điều này, do đó tại sao ứng dụng chạy trên 2.x và 3.x ngay từ đầu để có thể tập trung vào việc cho bạn thấy những gì cần được thay đổi để sử dụng nền tảng thế hệ tiếp theo.
8. Tài nguyên khác
Vấn đề/phản hồi trong 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 vấn đề của bạn trước khi gửi. Đường liên kết để tìm kiếm và báo cáo vấn đề mới:
Tài nguyên di chuyển
Bạn có thể tìm thấy các đường liên kết đến các thư mục repo cho Mô-đun 2 (START) và Mô-đun 3 (Finish) trong bảng bên dưới. Bạn cũng có thể truy cập vào các tệp này từ kho lưu trữ dành cho tất cả quá trình di chuyển App Engine. Bạn có thể sao chép hoặc tải tệp ZIP xuống.
Codelab | Python 2 | Python 3 |
Học phần 3 |
Tài nguyên của App Engine
Dưới đây là các thông tin khác liên quan đến việc di chuyển cụ thể này:
- Tài liệu tham khảo về Python Cloud NDB và Cloud Datastore
- Di chuyển sang Python 3 và thời gian chạy thế hệ mới của GAE
- Chung