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 (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 này chỉ cho bạn cách di chuyển từ thư viện ứng dụng ndb
(Cơ sở dữ liệu tiếp theo) tích hợp sẵn của App Engine sang Thư viện ứng dụng Cloud NDB.
Bạn sẽ tìm hiểu cách
- Sử dụng thư viện
ndb
của App Engine (nếu bạn chưa quen dùng) - Di chuyển từ
ndb
sang Cloud NDB - 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ó:
- Kỹ năng Python cơ bản
- Kiến thức thực hành về các lệnh Linux phổ biến
- Kiến thức cơ bản về việc phát triển và triển khai ứng dụng App Engine
- Một Ứng dụng App Engine Mô-đun 1 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
Trong Mô-đun 1, chúng tôi đã di chuyển các khung web từ webapp2
tích hợp sẵn của App Engine sang Flask. Trong lớp học lập trình này, chúng ta sẽ tiếp tục ngừng sử dụng các dịch vụ tích hợp sẵn trong App Engine bằng cách chuyển từ thư viện ndb
của App Engine sang Google Cloud NDB.
Sau khi hoàn tất quá trình di chuyển này, bạn có thể:
- Di chuyển sang Python 3 và thời gian chạy App Engine thế hệ tiếp theo
- Di chuyển sang Cloud Datastore (thư viện ứng dụng cho các ứng dụng không phải App Engine)
- Sắp xếp ứng dụng Python 2 (hoặc 3) vào vùng chứa và di chuyển sang Cloud Run
- Thêm sử dụng hàng đợi công việc của App Engine (đẩy) rồi di chuyển sang Cloud Tasks
Tuy nhiên, chúng tôi vẫn chưa có. Hãy hoàn tất lớp học lập trình này trước khi xem xét các bước tiếp theo. Quá trình di chuyển của hướng dẫn này trình bày các bước chính sau:
- Thiết lập/Chuẩn bị
- Thêm thư viện Cloud NDB
- Cập nhật tệp ứ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 với việc viết mã.
1. Thiết lập dự án
Nếu đã hoàn thành Lớp học lập trình về Mô-đun 1, 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.
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 1 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 1 (đường liên kết bên dưới).
Cho dù bạn sử dụng mã của chúng tôi hay của bạn, mã Mô-đun 1 là nơi chúng ta sẽ BẮT ĐẦU. Lớp học lập trình của Mô-đun 2 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 mã ở điểm Complete (bao gồm cả cổng "phần thưởng" không bắt buộc từ Python 2 đến 3):
- START: Mã mô-đun 1
- KẾT THÚC: Mô-đun 2 Mã Python 2 (TRƯNG THƯỞNG: Mã Python 3)
- Toàn bộ kho lưu trữ (để sao chép hoặc tải tệp ZIP xuống)
Thư mục mã Khởi động Mô-đun 1 của bạn phải có nội dung sau:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
Nếu đã hoàn tất hướng dẫn Mô-đun 1, 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.
3. (Triển khai lại) ứng dụng Mô-đun 1
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. Cập nhật tệp cấu hình (thêm thư viện Cloud NDB)
Nhiều dịch vụ tích hợp sẵn App Engine đã phát triển mạnh mẽ trong các sản phẩm của riêng họ và Datastore là một trong số đó. Hiện nay, các ứng dụng không phải App Engine có thể sử dụng Cloud Datastore. Đối với những người dùng ndb
lâu năm, nhóm Google Cloud đã tạo thư viện ứng dụng Cloud NDB để giao tiếp với Cloud Datastore. Công cụ này dùng được cho cả Python 2 và 3.
Hãy cập nhật các tệp xác nhận để thay thế App Engine ndb
bằng Cloud NDB rồi sửa đổi ứng dụng của chúng ta.
1. Cập nhật requirements.txt
Trong Mô-đun 1, phần phụ thuộc bên ngoài duy nhất cho ứng dụng là Flask. Bây giờ, chúng ta sẽ thêm Cloud NDB. Tệp requirements.txt
của bạn trông giống như sau ở cuối Mô-đun 1:
- TRƯỚC KHI:
Flask==1.1.2
Để di chuyển khỏi App Engine ndb
, bạn phải có thư viện Cloud NDB (google-cloud-ndb
), vì vậy, hãy thêm gói của ứng dụng này vào requirements.txt
.
- SAU:
Flask==1.1.2
google-cloud-ndb==1.7.1
Khi lớp học lập trình này được viết, phiên bản đề xuất mới nhất là 1.7.1, nhưng requirements.txt
trong kho lưu trữ có thể có phiên bản mới hơn. Bạn nên dùng phiên bản mới nhất của mỗi thư viện. Nếu không dùng được các phiên bản đó, bạn có thể khôi phục về một bản phát hành cũ.
Xoá thư mục lib
nếu bạn có một thư mục nhưng không phải là người vừa tạo thư mục ở trên. Bây giờ, hãy cài đặt (lại) các thư viện đã cập nhật bằng lệnh pip install -t lib -r requirements.txt
, sử dụng pip2
thay vì pip
nếu cần.
2. Cập nhật app.yaml
Việc thêm các thư viện ứng dụng Google Cloud như google-cloud-ndb
có một số yêu cầu, tất cả đều xoay quanh việc đưa vào "tích hợp sẵn" thư viện, các gói của bên thứ ba đã có sẵn trên máy chủ của Google. Bạn không liệt kê chúng trong requirements.txt
và cũng không sao chép chúng bằng pip install
. Các yêu cầu duy nhất:
- Chỉ định thư viện tích hợp sẵn trong
app.yaml
- Hướng họ đến thư viện bên thứ ba đã sao chép mà họ có thể dùng (trong
lib
)
Dưới đây là app.yaml
BẮT ĐẦU trong Mô-đun 1:
- TRƯỚC KHI:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
Giờ thì hãy thêm các dòng sau vào app.yaml
để tham chiếu đến một cặp gói đi kèm của bên thứ ba: grpcio
và setuptools
trong phần libraries
mới:
libraries:
- name: grpcio
version: 1.0.0
- name: setuptools
version: 36.6.0
Tại sao bạn nên sử dụng các thư viện tích hợp sẵn này? gRPC là một khung RPC mở được tất cả thư viện ứng dụng trên Google Cloud, bao gồm cả google-cloud-ndb
. Thư viện grpcio
là bộ chuyển đổi gRPC của Python và do đó là bắt buộc. Sẽ có lý do cho việc thêm setuptools
.
- SAU:
Với những thay đổi ở trên, app.yaml
được cập nhật giờ đây sẽ có dạng như sau:
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
3. Cập nhật appengine_config.py
Công cụ pkg_resources
, một phần của thư viện setuptools
, được dùng để cho phép các thư viện tích hợp sẵn của bên thứ ba truy cập vào các thư viện theo gói. Cập nhật appengine_config.py
để sử dụng pkg_resources
nhằm trỏ đến các thư viện đi kèm trong lib
. Khi bạn hoàn tất thay đổi này, toàn bộ tệp sẽ có dạng như sau:
import pkg_resources
from google.appengine.ext import vendor
# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
# Add libraries to pkg_resources working set to find the distribution.
pkg_resources.working_set.add_entry(PATH)
5. Cập nhật tệp ứng dụng
Sau khi không còn quy trình về tệp cấu hình, bạn hiện có thể di chuyển từ ndb
sang Cloud NDB. Để hoàn tất quá trình di chuyển, hãy cập nhật các thư viện đã nhập và thêm tính năng quản lý ngữ cảnh trong main.py
.
1. Nhập
Thực hiện hoán đổi nhập sau trong main.py
:
- TRƯỚC KHI
from google.appengine.ext import ndb
- SAU:
from google.cloud import ndb
Đôi khi, thay đổi từ thư viện App Engine sang thư viện Google Cloud là chỉ nhẹ trong trường hợp này. Đối với những dịch vụ tích hợp sẵn đã trở thành sản phẩm đầy đủ của Google Cloud, bạn sẽ nhập các thuộc tính từ google.cloud
thay vì google.appengine
.
2. Quyền truy cập vào kho dữ liệu
Để có thể sử dụng thư viện Cloud NDB, ứng dụng của bạn phải sử dụng trình quản lý ngữ cảnh Python. Mục đích của chúng là "cổng" quyền truy cập vào các tài nguyên mà chúng phải được thu thập trước khi có thể sử dụng. Trình quản lý bối cảnh hoạt động dựa trên kỹ thuật điều khiển khoa học máy tính có tên là Phân bổ tài nguyên là khởi tạo (hay RAII)). Trình quản lý ngữ cảnh được dùng với các tệp Python (phải mở trước khi có thể truy cập được) và tệp đồng thời, "khoá xoay" phải được thu thập trước khi mã trong một "phần quan trọng" có thể thực thi.
Tương tự, Cloud NDB yêu cầu bạn lấy ngữ cảnh của ứng dụng để giao tiếp với Datastore trước khi bất kỳ lệnh nào của Datastore có thể thực thi. Trước tiên, hãy tạo một ứng dụng (ndb.Client()
) bằng cách thêm ds_client = ndb.Client()
vào main.py
ngay sau khi khởi chạy Flask:
app = Flask(__name__)
ds_client = ndb.Client()
Lệnh with
Python chỉ được dùng để lấy ngữ cảnh của một đối tượng. Gói mọi khối mã truy cập vào Datastore bằng các câu lệnh with
.
Dưới đây là các hàm tương tự trong Mô-đun 1 để viết Thực thể mới vào Datastore và đọc để hiển thị các Thực thể được thêm gần đây nhất:
- TRƯỚC KHI:
Dưới đây là mã gốc không có tính năng quản lý ngữ cảnh:
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return (v.to_dict() for v in Visit.query().order(
-Visit.timestamp).fetch(limit))
- SAU:
Bây giờ, hãy thêm with ds_client.context():
và di chuyển mã truy cập Datastore của bạn vào khối with
:
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
with ds_client.context():
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
with ds_client.context():
return (v.to_dict() for v in Visit.query().order(
-Visit.timestamp).fetch(limit))
Ứng dụng trình điều khiển chính giống với ứng dụng chúng ta có trong Mô-đun 1 vì không có mã ndb
(hoặc Cloud NDB) ở đây:
@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)
Phương pháp hay nhất là đảm bảo có sự phân biệt rõ ràng giữa mã xử lý ứng dụng và quyền truy cập vào dữ liệu. Bằng cách này, mã xử lý ứng dụng chính của bạn sẽ không thay đổi khi cơ chế lưu trữ dữ liệu cơ bản bị thay đổi (như chúng ta đã làm trong quá trình di chuyển này).
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 Kho lưu trữ mô-đun 2.
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 2 này. Bạn vừa về đích, vì đây là lần di chuyển cuối cùng trong số quá trình di chuyển được đề xuất trong chuỗi này cho đến khi Datastore tiến hành.
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, bạn có thể linh hoạt thực hiện bước tiếp theo. Chọn một trong những tuỳ chọn sau:
- Phần thưởng cho mô-đun 2: Tiếp tục chuyển đến phần bổ sung của hướng dẫn này ở bên dưới để khám phá cách chuyển sang Python 3 và thời gian chạy App Engine thế hệ tiếp theo.
- 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
- Bạn không cần phải 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 3:
- Hiện đại hoá quyền truy cập vào Datastore từ Cloud NDB thành Cloud Datastore
- Đây là thư viện dùng cho các ứng dụng Python 3 App Engine và các ứng dụng không phải App Engine
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à đơn giản hoá quyền truy cập 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 không được tích hợp sẵn; 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 NDB 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 phiên bản 2.x và 3.x chưa bị sửa đổi, nghĩa là trong trường hợp này, chỉ có các thay đổi bắt buộc mới có trong cấu hình:
- Đơn giản hoá
app.yaml
để tham chiếu Python 3 và xoá các thư viện của bên thứ ba. - Xoá
appengine_config.py
và thư mụclib
vì chúng không còn cần thiết nữa.
Ngoài main.py
, các tệp requirements.txt
và templates/index.html
vẫn không thay đổi.
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 nhắc lại, đây là nội dung chúng tôi có trong app.yaml
ở phần kết của Phụ lục 2:
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
trên trang tài liệu của ứng dụng này.
Đ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
, trong đó app.yaml
sẽ 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
trên trang tài liệu về ứng dụng này. Bạn có thể xem thêm các ví dụ và phương pháp hay nhất khác trong tài liệu về cách khởi động App Engine Standard cũng như tài liệu về cách khởi độ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 độ gần gũi của giải pháp với mã Python 3 mẫu của Mô-đun 2. Để 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 2! 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 trang Tóm tắt/Dọn dẹp (trước đó) để biết các bước tiếp theo và cách dọn dẹp.
Đ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 1 (START) và Mô-đun 2 (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 qua kho lưu trữ dành cho mọi quá trình di chuyển trong lớp học lập trình App Engine. Tại đây, bạn có thể sao chép hoặc tải tệp ZIP xuống.
Codelab | Python 2 | Python 3 |
(không áp dụng) | ||
Học phần 2 |
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 NDB Python
- (CŨ) Di chuyển từ Python 2.5 và
webapp
sang 2.7 vàwebapp2
- Di chuyển sang Python 3 và thời gian chạy thế hệ mới của GAE
- Chung