2. Modül: App Engine'den Cloud NDB'ye taşıma

1. Genel Bakış

Bu codelab'lerden oluşan bu seri, Google App Engine (Standart) geliştiricilerinin bir dizi taşıma işleminde rehberlik ederek uygulamalarını modernleştirmelerine yardımcı olmayı amaçlamaktadır. En önemli adım, çalışma zamanında paket haline getirilmiş orijinal hizmetlerden uzaklaşmaktır. Bunun nedeni, yeni nesil çalışma zamanlarının daha esnek olması ve kullanıcılara daha fazla hizmet seçeneği sunmasıdır. Daha yeni nesil çalışma zamanına geçmek, Google Cloud ürünleriyle daha kolay entegrasyon yapmanızı, daha geniş bir desteklenen hizmet yelpazesinden yararlanmanızı ve mevcut dil sürümlerini desteklemenizi sağlar.

Bu eğitimde, App Engine'in yerleşik ndb (Next Veritabanı) istemci kitaplığından Cloud NDB istemci kitaplığına nasıl geçiş yapabileceğinizi öğrenebilirsiniz.

Neler öğreneceksiniz?

  • App Engine ndb kitaplığını kullanma (konuya aşina değilseniz)
  • ndb ürününden Cloud NDB'ye geçiş
  • Uygulamanızı Python 3'e taşıma

Gerekenler

Anket

Bu codelab'i nasıl kullanacaksınız?

Yalnızca baştan sona oku Okuyun ve alıştırmaları tamamlayın

2. Arka plan

1. Modül'de web çerçevelerini App Engine'in yerleşik webapp2 ürününden Flask'a taşıdık. Bu codelab'de, App Engine'in ndb kitaplığından Google Cloud NDB'ye geçerek App Engine'in yerleşik hizmetlerinden uzaklaşmaya devam edeceğiz.

Bu taşıma işlemini tamamlayarak şunları yapabilirsiniz:

  1. Python 3'e ve yeni nesil App Engine çalışma zamanına geçiş yapın
  2. Cloud Datastore'a taşıma (App Engine dışı uygulamalar için istemci kitaplığı)
  3. Python 2 (veya 3) uygulamanızı Container mimarisine alın ve Cloud Run'a geçiş yapın
  4. App Engine (push) görev sıralarının kullanımını ekleyip Cloud Tasks'a taşıma

Ancak henüz o noktaya ulaşamadık. Sonraki adımları düşünmeden önce bu codelab'i tamamlayın. Bu eğitimdeki taşıma işleminde şu birincil adımlar yer alır:

  1. Kurulum/Ön Çalışma
  2. Cloud NDB kitaplığı ekle
  3. Uygulama dosyalarını güncelle

3. Kurulum/Ön Çalışma

Eğiticinin ana bölümüne geçmeden önce projemizi yapılandıralım, kodu alın ve sonra çalışan kodla başladığımızı öğrenmemiz için temel uygulamayı dağıtalım.

1. Proje oluşturun

Modül 1 codelab'ini tamamladıysanız aynı projeyi (ve kodu) yeniden kullanmanızı öneririz. Alternatif olarak, yeni bir proje oluşturabilir veya mevcut başka bir projeyi yeniden kullanabilirsiniz. Projenin etkin bir faturalandırma hesabı olduğundan ve App Engine'in etkin olduğundan emin olun.

2. Temel örnek uygulamayı al

Ön koşullardan biri, çalışan bir Modül 1 örnek uygulamasına sahip olmaktır. Bu eğiticiyi tamamladıysanız çözümünüzü kullanın. Hemen tamamlayabilirsiniz (bağlantıyı yukarıdaki bağlantı) veya atlamak isterseniz Modül 1 deposunu kopyalayın (bağlantıyı aşağıda bulabilirsiniz).

İster sizin ister bizimkininkini kullanın, Modül 1 kodunu BAŞLAyeceğiz. Bu Modül 2 codelab'i, her adımda size yol gösterir. Tamamlandığında, FINISH noktasındaki koda benzeyecektir (Python 2'den 3'e kadar olan isteğe bağlı "bonus" bağlantı noktası da dahil):

BAŞLANGIÇ Modülü 1 kod klasörünüz şu içeriğe sahip olmalıdır:

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

Modül 1 eğiticisini tamamladıysanız Flask ve bağımlılıklarını içeren bir lib klasörünüz de olacaktır. lib klasörünüz yoksa sonraki adımda bu temel uygulamayı dağıtabilmemiz için klasörü pip install -t lib -r requirements.txt komutuyla oluşturun. Cihazınızda hem Python 2 hem de 3 yüklüyse Python 3 ile ilgili karışıklığı önlemek için pip yerine pip2 kullanmanızı öneririz.

3. (Yeniden) Modül 1 uygulamasını dağıtın

Hemen yürütmek için kalan ön çalışma adımlarınız:

  1. gcloud komut satırı aracını (gerekirse) yeniden tanıyın
  2. (Gerekiyorsa) Modül 1 kodunu App Engine'e dağıtın (yeniden)

Bu adımları başarıyla uygulayıp çalışır durumda olduğunu onayladıktan sonra, yapılandırma dosyalarından başlayarak bu eğiticide ilerleyeceğiz.

4. Yapılandırma dosyalarını güncelleme (Cloud NDB kitaplığı ekleme)

Birçok orijinal App Engine yerleşik hizmeti, kendi ürünlerine de gelişti. Datastore da bunlardan biridir. Günümüzde App Engine dışı uygulamalar, Cloud Datastore'u kullanabiliyor. Google Cloud ekibi, uzun süredir ndb kullanıcıları için Cloud Datastore ile iletişim kurmak amacıyla Cloud NDB istemci kitaplığını oluşturdu. Hem Python 2 hem de 3'te kullanılabilir.

Onay dosyalarını, App Engine ndb öğesini Cloud NDB ile değiştirecek ve ardından uygulamamızı değiştirecek şekilde güncelleyelim.

1. requirements.txt öğelerini güncelle

1. Modül'de uygulamamızın tek harici bağımlılığı Flask'tı. Şimdi Cloud NDB'yi ekleyeceğiz. 1. Modül'ün sonunda requirements.txt dosyanız şu şekilde görünüyordu:

  • ÖNCE:
Flask==1.1.2

ndb App Engine'den başka bir sisteme geçiş yapmak için Cloud NDB kitaplığı (google-cloud-ndb) gerekir. Bu nedenle paketi requirements.txt hizmetine ekleyin.

  • SONRASI:
Flask==1.1.2
google-cloud-ndb==1.7.1

Bu codelab'in yazıldığında önerilen en son sürüm 1.7.1'dir, ancak depodaki requirements.txt sürümü daha yeni bir sürüme sahip olabilir. Her kitaplığın en son sürümlerini kullanmanızı öneririz, ancak bu sürümler çalışmıyorsa daha eski bir sürüme geri dönebilirsiniz.

lib klasörünüz varsa ve yukarıda oluşturmadıysanız bu klasörü silin. Şimdi, güncellenen kitaplıkları pip install -t lib -r requirements.txt komutuyla gerektiği şekilde pip yerine pip2 kullanarak yeniden yükleyin.

2. app.yaml öğelerini güncelle

google-cloud-ndb gibi Google Cloud istemci kitaplıkları eklemek için birkaç gereksinim vardır. Bu gereksinimlerin tümü "yerleşik" özelliklerinin eklenmesiyle sağlanır kitaplıklarını, Google sunucularında zaten mevcut olan üçüncü taraf paketlerinde bulunabilir. Bu adresleri requirements.txt içinde listelemez veya pip install ile kopyalamazsınız. Tek gereksinim:

  1. app.yaml içindeki yerleşik kitaplıkları belirtin
  2. Kullanıcıları, çalışabilecekleri kopyalanmış üçüncü taraf kitaplıklarına yönlendirin (lib ürününde)

İşte Modül 1'deki BAŞLANGIÇ app.yaml:

  • ÖNCE:
runtime: python27
threadsafe: yes
api_version: 1

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

Şimdi, yeni libraries bölümünde grpcio ve setuptools adlı üçüncü taraf paket çiftine referans vermek için şu satırları app.yaml öğesine ekleyin:

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

Bu yerleşik kitaplıkları neden kullanmalısınız? gRPC, google-cloud-ndb dahil olmak üzere tüm Google Cloud istemci kitaplıkları tarafından kullanılan açık bir RPC çerçevesidir. grpcio kitaplığı, Python gRPC bağdaştırıcısıdır ve bu nedenle gereklidir. setuptools eklenmenin gerekçesi yakında görülecektir.

  • SONRASI:

Yukarıdaki değişiklikleri yaptıktan sonra, güncellenmiş app.yaml artık şu şekilde görünmelidir:

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. appengine_config.py öğelerini güncelle

setuptools kitaplığının bir parçası olan pkg_resources aracı, yerleşik üçüncü taraf kitaplıkların gruplandırılmış kitaplıklara erişmesini sağlamak için kullanılır. appengine_config.py uygulamasını, pkg_resources paketiyle lib hizmetindeki gruplandırılmış kitaplıklara yönlendirecek şekilde güncelleyin. Bu değişikliği yaptığınızda dosyanın tamamı aşağıdaki gibi görünmelidir:

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. Uygulama dosyalarını güncelle

Yapılandırma dosyası resmi işlemleri sona erdiğinde, artık ndb ürününden Cloud NDB'ye geçiş yapabilirsiniz. Taşıma işlemini tamamlamak için main.py uygulamasında içe aktarılan kitaplıkları güncelleyin ve bağlam yönetimi kullanımını ekleyin.

1. İçe aktarılanlar

main.py uygulamasında aşağıdaki içe aktarma değişimini yap:

  • ÖNCESİ
from google.appengine.ext import ndb
  • SONRASI:
from google.cloud import ndb

App Engine kitaplığından Google Cloud kitaplığına geçiş, bazen bu örnek kadar incelikli olabilir. Tam Google Cloud ürünleri haline gelen yerleşik hizmetlerde özellikleri google.appengine yerine google.cloud ürününden içe aktaracaksınız.

2. Datastore erişimi

Cloud NDB kitaplığını kullanabilmeniz için uygulamanızın Python içerik yöneticileri kullanması gerekir. Amaçları “kapı durumunu” kaynakların kullanılabilmesi için öncelikle edinilmesi gerekir. Bağlam yöneticileri, Kaynak Atama: Başlatma (veya RAII) olarak bilinen bilgisayar bilimleri kontrol tekniğine dayanır. Bağlam yöneticileri, Python dosyaları (erişebilmeleri için açılmaları gerekir) ve eşzamanlılık, "spin Locks" ile kullanılır "kritik bölümdeki" koddan önce edinilmelidir yürütülebilir.

Benzer şekilde, Cloud NDB herhangi bir Datastore komutu yürütülmeden önce Datastore ile iletişim kurmak için istemcinin bağlamını edinmenizi gerektirir. Öncelikle, main.py Flask başlatma işleminden hemen sonra ds_client = ndb.Client() ekleyerek bir istemci (ndb.Client()) oluşturun:

app = Flask(__name__)
ds_client = ndb.Client()

Pythonwith komutu yalnızca bir nesnenin bağlamını almak için kullanılır. Datastore'a erişimi olan kod bloklarını with ifadeleriyle sarmalayın.

Aşağıda, Datastore'a yeni bir Varlık yazma ve en son eklenen Varlıkları görüntüleme için okuma yapma ile ilgili Modül 1'deki işlevlerin aynısı verilmiştir:

  • ÖNCE:

Bağlam yönetimi içermeyen orijinal kod şöyledir:

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))
  • SONRASI:

Şimdi with ds_client.context(): öğesini ekleyin ve Datastore erişim kodunuzu with bloğuna taşıyın:

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))

Burada ndb (veya Cloud NDB) kodu olmadığından, ana sürücü uygulaması Modül 1'deki uygulamayla aynı kalır:

@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)

En iyi uygulamalardan biri, uygulama kodu ile veri erişimi arasında net bir ayrım sağlamaktır. Böylece, temel veri depolama mekanizması bu taşımada yaptığımız gibi değiştirildiğinde ana uygulama kodunuz değişmez.

6. Özet/Temizlik

Uygulamayı dağıtma

Uygulamanızı gcloud app deploy ile yeniden dağıtın ve uygulamanın çalıştığını onaylayın. Kodunuz artık Modül 2 deposundaki kodla eşleşmelidir.

Bu seriye, önceki codelab'lerden herhangi birini gerçekleştirmeden başladıysanız uygulamanın kendisi değişmez. ana web sayfasına (/) yapılan tüm ziyaretleri kaydeder ve siteyi yeteri kadar kez ziyaret ettiğinizde aşağıdaki gibi görünür:

ziyaretme uygulaması

2. Modül codelab'ini tamamladığınız için tebrik ederiz. Datastore'un kullandığı bu seride kesinlikle önerilen son taşıma işlemleri olduğu için bitiş çizgisini geçtiniz.

İsteğe bağlı: Temizleme

Bir sonraki taşıma codelab'ine geçmeye hazır olana kadar faturalandırılmamak için temizlik yapmaya ne dersiniz? Mevcut geliştiriciler olarak muhtemelen App Engine'in fiyatlandırma bilgileri konusunda yeterince bilgi sahibisinizdir.

İsteğe bağlı: Uygulamayı devre dışı bırakma

Henüz bir sonraki eğitime geçmeye hazır değilseniz sizden ücret alınmasını önlemek için uygulamanızı devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda projeyi yeniden etkinleştirebilirsiniz. Uygulamanız devre dışı bırakıldığında ücretlendirilecek trafik almazsınız ancak ücretsiz kotayı aşarsanız Datastore kullanımınız için faturalandırılabilirsiniz. Bu nedenle, bu sınırın altına düşecek kadar silin.

Öte yandan, taşıma işlemine devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız projenizi kapatabilirsiniz.

Sonraki adımlar

Bu noktada, bir sonraki hamleniz konusunda esneklik vardır. Aşağıdaki seçeneklerden birini belirleyin:

  • Modül 2 Bonusu: Python 3 ve yeni nesil App Engine çalışma zamanına bağlantı oluşturmayı keşfetmek için bu eğiticinin bonus bölümüne geçin.
  • 7. Modül: App Engine Aktarma Görev Sıraları ([push] Görev Sıraları kullanıyorsanız gereklidir)
    • 1. Modül uygulamasına App Engine taskqueue aktarma görevleri ekler
    • Kullanıcıları Modül 8'de Cloud Tasks'a taşıma işlemi için hazırlar
  • 4. Modül: Docker ile Cloud Run'a Geçiş
    • Docker ile Cloud Run'da çalışması için uygulamanızı container mimarisine alın
    • Python 2'de kalmanızı sağlar
  • 5. Modül: Cloud Buildpacks ile Cloud Run'a Geçiş
    • Cloud Buildpacks ile uygulamanızı Cloud Run'da çalıştırmak için container mimarisine alın
    • Docker, container'lar veya Dockerfile hakkında bilgi sahibi olmanız gerekmez.
    • Uygulamanızı Python 3'e taşımış olmanız gerekir
  • 3. Modül:
    • Cloud NDB'den Cloud Datastore'a Datastore erişimini modernleştirme
    • Bu, Python 3 App Engine uygulamaları ve App Engine dışı uygulamalar için kullanılan kitaplıktır

7. BONUS: Python 3'e taşıyın

En yeni App Engine çalışma zamanına ve özelliklerine erişmek için Python 3'e geçmenizi öneririz. Örnek uygulamamızda, Datastore kullandığımız tek dahili hizmetti. ndb ürününden Cloud NDB'ye geçiş yaptığımız için artık App Engine'in Python 3 çalışma zamanına bağlantı verebiliriz.

Genel Bakış

Python 3'e bağlantı oluşturma işlemi, Google Cloud eğitimi kapsamında değildir. Bununla birlikte codelab'in bu bölümü, geliştiricilere Python 3 App Engine çalışma zamanının farklılıkları hakkında fikir verir. Yeni nesil çalışma zamanının olağanüstü özelliklerinden biri de üçüncü taraf paketlere erişimin kolaylaştırılmasıdır. app.yaml ürününde yerleşik paketleri belirtmeye gerek yoktur veya yerleşik olmayan kitaplıkları kopyalama ya da yükleme zorunluluğu yoktur; requirements.txt içinde listelenmeleri için dolaylı olarak yüklenirler.

Örneğimiz çok temel ve Cloud NDB Python 2-3 uyumlu olduğundan hiçbir uygulama kodunun açıkça 3.x'e taşınması gerekmez; Uygulama, değiştirilmeden 2.x ve 3.x sürümlerinde çalışır. Dolayısıyla, bu durumda yalnızca gerekli değişiklikler yapılandırmada olacaktır:

  1. app.yaml yönergesini, Python 3'e referans verecek ve üçüncü taraf kitaplıklarını kaldıracak şekilde basitleştirin.
  2. Artık gerekli olmadığı için appengine_config.py ve lib klasörünü silin.

main.py dosyaları gibi requirements.txt ve templates/index.html dosyalarında da değişiklik olmaz.

app.yaml basitleştirin

ÖNCE:

Bu örnek uygulamada yapılacak tek değişiklik, app.yaml uygulamasının önemli ölçüde kısaltılmasıdır. 2. Modül'ün bitimindeapp.yaml döneminde yaptıklarımız:

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

SONRASI:

Python 3'te threadsafe, api_version ve libraries yönergelerinin tamamı kullanımdan kaldırılmıştır; tüm uygulamaların iş parçacığı güvenli olduğu varsayılır ve api_version Python 3'te kullanılmaz. Artık App Engine hizmetlerine önceden yüklenmiş yerleşik üçüncü taraf paketleri olmadığından libraries desteği de sonlandırılmıştır. Bu değişiklikler hakkında daha fazla bilgi edinmek için app.yaml ile ilgili değişikliklerle ilgili dokümanları inceleyin. Sonuç olarak, app.yaml içinden üçünü de silip desteklenen bir Python 3 sürümüne güncellemeniz gerekir (aşağıya bakın).

İsteğe bağlı: handlers yönergesinin kullanımı

Ayrıca, App Engine uygulamalarındaki trafiği yönlendiren handlers yönergesi de kullanımdan kaldırılmıştır. Yeni nesil çalışma zamanında, uygulama yönlendirmesi için web çerçevelerinin kullanılmasını beklediği için tüm "işleyici komut dosyaları" "auto" olarak değiştirilmelidir. Yukarıdaki değişiklikleri birleştirdiğinizde şu app.yaml elde edersiniz:

runtime: python38

handlers:
- url: /.*
  script: auto

script: auto hakkında daha fazla bilgi için dokümanların sayfasını ziyaret edin.

handlers yönergesi kaldırılıyor

handlers desteği sonlandırıldığından, tek satır app.yaml bırakarak da bölümün tamamını kaldırabilirsiniz:

runtime: python38

Varsayılan olarak bu işlem, tüm uygulamalar için kullanılabilen Gunicorn WSGI web sunucusunu başlatır. gunicorn hakkında bilginiz varsa temel app.yaml temelleriyle başlatıldığında varsayılan olarak çalıştırılan komut şudur:

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

İsteğe bağlı: entrypoint yönergesinin kullanımı

Bununla birlikte, uygulamanız belirli bir başlangıç komutu gerektiriyorsa, app.yaml aşağıdaki gibi görünen bir entrypoint yönergesiyle belirtilebilir:

runtime: python38
entrypoint: python main.py

Bu örnekte özellikle gunicorn yerine Flask geliştirme sunucusunun kullanılması istenmektedir. Geliştirme sunucusunu başlatan kodun, main.py alt kısmına şu küçük bölüm eklenerek 8080 numaralı bağlantı noktasındaki 0.0.0.0 arayüzünde başlatılması için uygulamanıza da eklenmesi gerekir:

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

entrypoint hakkında daha fazla bilgi için dokümanlar sayfasını inceleyin. Daha fazla örnek ve en iyi uygulama için App Engine Standart başlangıç belgelerine ve App Engine Esnek başlangıç belgelerine bakabilirsiniz.

appengine_config.py ve lib alanlarını sil

appengine_config.py dosyasını ve lib klasörünü silin. App Engine, Python 3'e geçiş yaparken requirements.txt üzerinde listelenen paketleri edinir ve yükler.

appengine_config.py yapılandırma dosyası, ister kendiniz kopyalamış olun ister App Engine sunucularında zaten bulunan (yerleşik) mevcut olanları kullanın, üçüncü taraf kitaplıklarını/paketlerini tanımak için kullanılır. Python 3'e geçiş yapılan büyük değişikliklerin özetini aşağıda bulabilirsiniz:

  1. Kopyalanan üçüncü taraf kitaplıkların paketlenmesine izin verilmez (requirements.txt içinde listelenmiştir)
  2. lib klasöründe pip install yok, yani lib klasör dönemi yok
  3. app.yaml ürününde yerleşik üçüncü taraf kitaplık girişleri yok
  4. Uygulamanın üçüncü taraf kitaplıklara referansta bulunması gerekmez, bu nedenle appengine_config.py dosyası gerekmez

requirements.txt ürününde gerekli tüm üçüncü taraf kitaplıklarının listelenmesi yeterlidir.

Uygulamayı dağıtma

Çalıştığından emin olmak için uygulamanızı yeniden dağıtın. Çözümünüzün Modül 2 örnek Python 3 koduna ne kadar yakın olduğunu da onaylayabilirsiniz. Python 2 ile arasındaki farkları görselleştirmek için kodu Python 2 sürümüyle karşılaştırın.

2. Modül'deki bonus adımı tamamladığınız için tebrikler. Python 3 çalışma zamanı için yapılandırma dosyalarını hazırlama hakkındaki belgeleri inceleyin. Son olarak, sonraki adımlar ve temizlik için (önceki) Özet/Temizlik sayfasını inceleyin.

Başvurunuzu hazırlama

Uygulamanızı taşıma zamanı geldiğinde main.py ve diğer uygulama dosyalarınızı 3.x'e taşımanız gerekecektir. Dolayısıyla, en iyi uygulama, 2.x uygulamanızı "ilerisel uyumlu" hale getirmek için elinizden gelenin en iyisini yapmaktır. yardımcı olabilirsiniz.

Bunu başarmanıza yardımcı olacak birçok online kaynak vardır, ancak önemli ipuçlarından bazıları şunlardır:

  1. Tüm uygulama bağımlılıklarının tamamen 3.x ile uyumlu olduğundan emin olun
  2. Uygulamanızın en az 2.6 (tercihen 2.7) sürümünde çalıştığından emin olun.
  3. Uygulamanın test paketinin tamamını (ve minimum% 80 kapsamı) geçmesini sağlama
  4. six, Future ve/veya Modernize gibi uyumluluk kitaplıklarını kullanın
  5. Geriye dönük olarak uyumsuz olan 2.x ve 3.x farklılıkları konusunda kendinizi eğitin
  6. Herhangi bir G/Ç, muhtemelen Unicode ve bayt dizesi uyumsuzluklarına yol açacaktır

Örnek uygulama, tüm bunlar göz önünde bulundurularak tasarlanmıştır. Bu nedenle uygulama kullanıma hazır olarak 2.x ve 3.x sürümünde çalışır. Bu sayede yeni nesil platformu kullanmak için nelerin değiştirilmesi gerektiğini size gösterebiliriz.

8. Ek kaynaklar

App Engine taşıma modülü codelab'leri ile ilgili sorunlar/geri bildirimler

Bu codelab'de herhangi bir sorun bulursanız lütfen göndermeden önce sorununuzu arayın. Arama ve yeni sayı oluşturma bağlantıları:

Taşıma kaynakları

Modül 1 (START) ve Modül 2 (FINISH) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bunlara tüm App Engine codelab taşıma işlemleri için depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası indirebilirsiniz.

Codelab

Python 2

Python 3

1. Modül

kod

(Yok)

2. Modül

kod

kod

App Engine kaynakları

Bu taşıma işlemiyle ilgili ek kaynaklar aşağıda verilmiştir: