Modül 3: Google Cloud NDB'den Cloud Datastore'a taşıma

1. Genel Bakış

Bu codelab serisi (kendi hızınızda ilerleyebileceğiniz, uygulamalı eğitimler), bir dizi taşıma işlemi boyunca yol göstererek Google App Engine (standart ortam) geliştiricilerinin uygulamalarını modernleştirmelerine yardımcı olmayı amaçlar. En önemli adım, yeni nesil çalışma zamanları daha esnek olduğundan ve kullanıcılara daha fazla hizmet seçeneği sunduğundan orijinal çalışma zamanı paketli hizmetlerden uzaklaşmaktır. Daha yeni nesil çalışma zamanına geçiş yaparak Google Cloud ürünleriyle daha kolay entegrasyon sağlayabilir, daha geniş bir desteklenen hizmet yelpazesinden yararlanabilir ve mevcut dil sürümlerini destekleyebilirsiniz.

Bu isteğe bağlı eğitimde, geliştiricilere Datastore hizmetiyle iletişim kurmak için istemci kitaplığı olarak Cloud NDB'den Cloud Datastore'a nasıl geçiş yapacakları gösterilmektedir. NDB'yi tercih eden geliştiriciler, Python 3 ile uyumlu olduğu için bu kitaplığı kullanmaya devam edebilir. Bu nedenle, taşıma işlemi isteğe bağlıdır. Bu taşıma işlemi yalnızca tutarlı bir kod tabanı ve Cloud Datastore'u kullanan diğer uygulamalarla paylaşılan kitaplıklar oluşturmak isteyenler içindir. Bu konu, "Arka plan" bölümünde açıklanmıştır.

Öğrenecekleriniz

  • Cloud NDB'yi kullanma (bilmiyorsanız)
  • Cloud NDB'den Cloud Datastore'a taşıma
  • Uygulamanızı Python 3'e taşıma

Gerekenler

  • Etkin bir GCP faturalandırma hesabına sahip Google Cloud Platform projesi
  • Temel Python becerileri
  • Temel Linux komutları hakkında çalışma bilgisi
  • App Engine uygulamaları geliştirme ve dağıtma hakkında temel bilgiler
  • Çalışan bir 2. Modül App Engine 2.x veya 3.x uygulaması.

Anket

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

Sadece okuyun Okuyun ve alıştırmaları tamamlayın

2. Arka plan

Cloud NDB, uzun süredir App Engine geliştirenler için harika bir Datastore çözümü olsa ve Python 3'e geçişe yardımcı olsa da App Engine geliştiricilerinin Datastore'a erişebileceği tek yol bu değildir. App Engine'in Datastore'u 2013'te kendi ürünü haline geldiğinde, tüm kullanıcıların Datastore'u kullanabilmesi için yeni bir istemci kitaplığı olan Google Cloud Datastore oluşturuldu.

Python 3 App Engine ve non-App Engine geliştiricilerinin Cloud Datastore'u (Cloud NDB değil) kullanması önerilir. Python 2 App Engine geliştiricilerinin ndb'dan Cloud NDB'ye geçiş yapması ve oradan Python 3'e taşıması önerilir. Ancak bu geliştiriciler, Cloud Datastore'a da geçiş yapabilir. Bu, özellikle Cloud Datastore'u kullanan (ör. yukarıda bahsedilenler) kodu olan ve tüm uygulamalarında paylaşılan kitaplıklar oluşturmak isteyen geliştiriciler için mantıklı bir karardır. Kodun yeniden kullanılması ve kod tutarlılığı, en iyi uygulamalardır. Her ikisi de genel olarak bakım maliyetinin düşmesine katkıda bulunur. Bu durum, aşağıda özetlenmiştir:

Cloud NDB'den Cloud Datastore'a geçiş

  • Geliştiricilerin Datastore erişimi için tek bir kod tabanına odaklanmasına olanak tanır.
  • Cloud NDB'yi kullanan bazı kodları ve Cloud Datastore'u kullanan diğer kodları korumaktan kaçınır.
  • Kod tabanında daha fazla tutarlılık ve daha iyi kod yeniden kullanılabilirliği sağlar.
  • Genel bakım maliyetinin düşmesine katkıda bulunan ortak/paylaşılan kitaplıkların kullanılmasını sağlar.

Bu taşıma işleminde şu temel adımlar yer alır:

  1. Kurulum/Ön Hazırlık
  2. Cloud NDB'yi Cloud Datastore istemci kitaplıklarıyla değiştirme
  3. Uygulamayı güncelle

3. Kurulum/Ön Hazırlık

Eğitimin ana bölümüne başlamadan önce projemizi oluşturalım, kodu alalım ve temel uygulamayı dağıtalım. Böylece, çalışır durumda olan bir kodla başladığımızı biliriz.

1. Proje oluşturma

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

2. Temel örnek uygulamayı edinme

Ön koşullardan biri, çalışan bir 2. Modül örnek uygulamasına sahip olmaktır. Bu eğitimi tamamladıysanız çözümünüzü kullanın. Formu şimdi doldurabilir (yukarıdaki bağlantı) veya atlamak isterseniz 2. Modül deposunu kopyalayabilirsiniz (aşağıdaki bağlantı).

Sizinkini veya bizimkini kullanıyor olsanız da 2. Modül kodu, BAŞLAYACAĞIMIZ yerdir. Bu 3. Modül codelab'inde her adım ayrıntılı olarak açıklanmaktadır. Tamamlandığında, kodun SON noktadaki koda benzemesi gerekir. Bu eğitimin Python 2 ve 3 sürümleri vardır. Aşağıdan doğru kod deposunu alın.

Python 2

Python 2 Modülü 2 BAŞLANGIÇ dosyalarının (sizinki veya bizimki) dizini şu şekilde görünmelidir:

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

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

Python 3

Python 3 Modülü 2 BAŞLANGIÇ dosyalarının (sizinki veya bizimkiler) dizini şu şekilde görünmelidir:

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

Python 3 için ne lib ne de appengine_config.py kullanılır.

3. 2. Modül uygulamasını (yeniden) dağıtma

Şimdi yapmanız gereken kalan ön hazırlık adımları:

  1. Gerekirse gcloud komut satırı aracıyla ilgili bilgilerinizi tazeleyin.
  2. 1. Modül kodunu App Engine'e (yeniden) dağıtın (gerekirse).

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

4. Cloud NDB'yi Cloud Datastore istemci kitaplıklarıyla değiştirme

Tek yapılandırma değişikliği, requirements.txt dosyanızdaki küçük bir paket değişimidir.

1. requirements.txt adresini güncelleyin

2. Modülü tamamladığınızda requirements.txt dosyanız aşağıdaki gibi görünüyordu:

  • ÖNCE (Python 2 ve 3):
Flask==1.1.2
google-cloud-ndb==1.7.1

Cloud NDB kitaplığını (google-cloud-ndb) Cloud Datastore kitaplığının (google-cloud-datastore) en son sürümüyle değiştirerek requirements.txt dosyasını güncelleyin. Flask girişini olduğu gibi bırakın. Python 2 ile uyumlu Cloud Datastore'un son sürümünün 1.15.3 olduğunu unutmayın:

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

Deponun bu eğitimden daha düzenli olarak güncellendiğini unutmayın. Bu nedenle, requirements.txt dosyası daha yeni sürümleri yansıtıyor olabilir. Her kitaplığın en son sürümünü kullanmanızı öneririz. Ancak bu sürümler çalışmazsa eski bir sürüme geri dönebilirsiniz. Yukarıdaki sürüm numaraları, bu codelab'in en son güncellendiği tarihteki en yeni sürümlerdir.

2. Diğer yapılandırma dosyaları

Diğer yapılandırma dosyaları olan app.yaml ve appengine_config.py, önceki taşıma adımındaki gibi kalmalıdır:

  • app.yaml, üçüncü taraf paketleri grpcio ve setuptools'ye (hâlâ) referans vermelidir.
  • appengine_config.py, pkg_resources ve google.appengine.ext.vendor değerlerini lib içindeki üçüncü taraf kaynaklarına yönlendirmeye (devam etmelidir).

Şimdi uygulama dosyalarına geçelim.

5. Uygulama dosyalarını güncelleme

template/index.html ile ilgili herhangi bir değişiklik yapılmadı ancak main.py ile ilgili birkaç güncelleme var.

1. İçe aktarılanlar

İçe aktarma bölümünün başlangıç kodu aşağıdaki gibi görünmelidir:

  • ÖNCESİ:
from flask import Flask, render_template, request
from google.cloud import ndb

google.cloud.ndb içe aktarma ifadesini Cloud Datastore için olanla değiştirin: google.cloud.datastore. Datastore istemci kitaplığı, bir öğede zaman damgası alanının otomatik olarak oluşturulmasını desteklemediğinden, manuel olarak oluşturmak için standart kitaplık datetime modülünü de içe aktarın. Genel olarak, standart kitaplık içe aktarma işlemleri üçüncü taraf paketi içe aktarma işlemlerinin üzerinde yer alır. Bu değişiklikleri tamamladığınızda aşağıdaki gibi görünmelidir:

  • ŞU TARİHTEN SONRA:
from datetime import datetime
from flask import Flask, render_template, request
from google.cloud import datastore

2. Başlatma ve veri modeli

Flask başlatıldıktan sonra, NDB veri modeli sınıfı ve alanlarını oluşturan 2. Modül örnek uygulaması aşağıdaki gibi görünür:

  • ÖNCESİ:
app = Flask(__name__)
ds_client = ndb.Client()

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

Cloud Datastore kitaplığında böyle bir sınıf yok. Bu nedenle, Visit sınıfı bildirimini silin. Datastore ile iletişim kurmak için yine de bir istemciye ihtiyacınız var. Bu nedenle ndb.Client() değerini datastore.Client() olarak değiştirin. Datastore kitaplığı daha "esnektir" ve NDB'de olduğu gibi yapılarını "önceden bildirmeden" öğeler oluşturmanıza olanak tanır. Bu güncellemeden sonra main.py'nın bu kısmı şu şekilde görünmelidir:

  • ŞU TARİHTEN SONRA:
app = Flask(__name__)
ds_client = datastore.Client()

3. Veri deposu erişimi

Cloud Datastore'a geçiş yapmak için Datastore varlıklarını (kullanıcı düzeyinde) oluşturma, depolama ve sorgulama şeklinizi değiştirmeniz gerekir. Uygulamalarınız için bu taşımanın zorluğu, Datastore kodunuzun karmaşıklığına bağlıdır. Örnek uygulamamızda, güncellemeyi mümkün olduğunca basit hale getirmeye çalıştık. Başlangıç kodumuz:

  • ÖNCESİ:
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])

Cloud Datastore ile genel bir varlık oluşturun ve varlığınızdaki gruplandırılmış nesneleri "anahtar" ile tanımlayın. Anahtar/değer çiftlerinden oluşan bir JSON nesnesi (Python dict) ile veri kaydını oluşturun, ardından beklenen put() ile veri deposuna yazın. Sorgulama benzerdir ancak Datastore ile daha basittir. Burada, eşdeğer Datastore kodunun nasıl farklılık gösterdiğini görebilirsiniz:

  • ŞU TARİHTEN SONRA:
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)

store_visit() ve fetch_visits() işlev gövdelerini yukarıdaki gibi güncelleyin ve imzalarını önceki sürümle aynı tutun. Ana işleyici root() ile ilgili herhangi bir değişiklik yapılmamıştır. Bu değişiklikleri tamamladıktan sonra uygulamanız artık Cloud Datastore'u kullanmaya uygun ve test etmeye hazır.

6. Özet/Temizleme

Uygulamayı dağıtma

Uygulamanızı gcloud app deploy ile yeniden dağıtın ve uygulamanın çalıştığını onaylayın. Kodunuz artık 3. Modül depo klasörlerindeki kodla eşleşmelidir:

Bu seriye önceki codelab'lerden herhangi birini yapmadan başladıysanız uygulamanın kendisi değişmez. Ana web sayfasını (/) tüm ziyaretleri kaydeder ve siteyi yeterince ziyaret ettiğinizde aşağıdaki gibi görünür:

visitme uygulaması

3. Modül codelab'ini tamamladığınız için tebrik ederiz. Artık Datastore'a erişmek için hem Cloud NDB hem de Cloud Datastore istemci kitaplıklarını kullanabileceğinizi biliyorsunuz. İkincisine geçerek artık tutarlılık ve bakım maliyetinin düşürülmesi için paylaşılan kitaplıklar, ortak kod ve kodun yeniden kullanılması gibi avantajlardan yararlanabilirsiniz.

İsteğe bağlı: Temizleme

Bir sonraki taşıma codelab'ine geçmeye hazır olana kadar faturalandırılmamak için temizlik yapma konusunda ne yapmalısınız? Mevcut geliştiriciler olarak App Engine'in fiyatlandırma bilgileri hakkında bilgi sahibi olabilirsiniz.

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

Henüz bir sonraki eğitime geçmeye hazır değilseniz ücretlendirilmemek için uygulamanızı devre dışı bırakın. Bir sonraki codelab'e geçmeye hazır olduğunuzda yeniden etkinleştirebilirsiniz. Uygulamanız devre dışıyken ücretlendirmeye neden olacak trafik almaz. Ancak Datastore kullanımınız ücretsiz kotayı aşarsa bu kullanım için de faturalandırılabilirsiniz. Bu nedenle, bu sınırın altında kalmak için yeterli miktarda veri silin.

Diğer yandan, taşımalara devam etmeyecekseniz ve her şeyi tamamen silmek istiyorsanız projenizi kapatabilirsiniz.

Sonraki adımlar

Buradan sonra aşağıdaki taşıma modüllerini inceleyebilirsiniz:

  • 3. Modül Bonusu: Python 3'e ve yeni nesil App Engine çalışma zamanına nasıl taşıma yapacağınızı öğrenmek için bonus bölümüne geçin.
  • 7. Modül: App Engine Push Görev Sıraları ([push] görev sıralarını kullanıyorsanız gereklidir)
    • 1. modül uygulamasına App Engine taskqueue push görevleri ekler.
    • 8. modülde kullanıcıları Cloud Tasks'a geçişe hazırlar.
  • 4. Modül: Docker ile Cloud Run'a taşıma
    • Uygulamanızı Docker ile Cloud Run'da çalışacak şekilde container'a dönüştürme
    • Python 2'de kalmanıza olanak tanır.
  • 5. Modül: Cloud Buildpack'ler ile Cloud Run'a taşıma
    • Cloud Buildpacks ile Cloud Run'da çalışacak şekilde uygulamanızı container'a dönüştürme
    • Docker, container'lar veya Dockerfile hakkında hiçbir şey bilmeniz gerekmez.
    • Uygulamanızı Python 3'e taşımış olmanız gerekir.
  • 6. Modül: Cloud Firestore'a taşıma
    • Firebase özelliklerine erişmek için Cloud Firestore'a geçiş yapma
    • Cloud Firestore, Python 2'yi desteklese de bu Codelab yalnızca Python 3'te kullanılabilir.

7. BONUS: Python 3'e taşıma

En yeni App Engine çalışma zamanına ve özelliklerine erişmek için Python 3'e geçmenizi öneririz. Örnek uygulamamızda kullandığımız tek yerleşik hizmet Datastore'du ve ndb'dan Cloud NDB'ye geçtiğimiz için artık App Engine'in Python 3 çalışma zamanına taşıyabiliriz.

Genel Bakış

Python 3'e taşıma işlemi Google Cloud eğitiminin kapsamı dışında olsa da bu codelab'in bu bölümü, geliştiricilere Python 3 App Engine çalışma zamanının nasıl farklılık gösterdiği hakkında fikir verir. Yeni nesil çalışma zamanının öne çıkan özelliklerinden biri, üçüncü taraf paketlerine basitleştirilmiş erişimdir: Yerleşik paketleri app.yaml içinde belirtmenize veya yerleşik olmayan kitaplıkları kopyalamanıza ya da yüklemenize gerek yoktur. Bu kitaplıklar, requirements.txt içinde listelendiklerinden örtülü olarak yüklenir.

Örneğimiz çok basit olduğundan ve Cloud Datastore Python 2-3 ile uyumlu olduğundan uygulama kodunun 3.x'e açıkça taşınması gerekmez. Uygulama, 2.x ve 3.x üzerinde değiştirilmeden çalışır. Bu durumda, gerekli tek değişiklik yapılandırmadır:

  1. Python 3'e referans vermek için app.yaml ifadesini basitleştirin ve paketlenmiş üçüncü taraf kitaplıklarına yapılan referansı kaldırın.
  2. Artık gerekli olmadıkları için appengine_config.py ve lib klasörünü silin.

main.py ve templates/index.html uygulama dosyaları değişmez.

requirements.txt adresini güncelleyin

Python 2'yi destekleyen Cloud Datastore'un son sürümü 1.15.3'tür. requirements.txt tarihine kadar Python 3'ün en yeni sürümüne (bu tarihe kadar daha yeni bir sürüm çıkmış olabilir) güncelleyin. Bu eğitim yazıldığında en son sürüm 2.1.0 olduğundan bu satırı aşağıdaki gibi (veya en son sürüm neyse ona göre) düzenleyin:

google-cloud-datastore==2.1.0

app.yaml kolaylaştırın

ÖNCESİ:

Bu örnek uygulamadaki tek gerçek değişiklik, app.yaml değerinin önemli ölçüde kısaltılmasıdır. app.yaml3. Modülün sonunda ne yaptığımızı hatırlatmak isteriz:

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

ŞU TARİHTEN SONRA:

Python 3'te threadsafe, api_version ve libraries yönergelerinin tümü kullanımdan kaldırılmıştır. Tüm uygulamaların iş parçacığı açısından güvenli olduğu varsayılır ve Python 3'te api_version kullanılmaz. App Engine hizmetlerinde artık önceden yüklenmiş yerleşik üçüncü taraf paketleri bulunmadığından libraries de kullanımdan kaldırıldı. Bu değişiklikler hakkında daha fazla bilgi için app.yaml'teki değişikliklerle ilgili dokümanları inceleyin. Bu nedenle, üçünü de app.yaml konumundan silmeniz ve 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, trafiği App Engine uygulamalarına yönlendiren handlers yönergesinin desteği de sonlandırıldı. Yeni nesil çalışma zamanı, uygulama yönlendirmesinin web çerçeveleri tarafından yönetilmesini beklediğinden tüm "işleyici komut dosyaları" "auto" olarak değiştirilmelidir. Yukarıdaki değişiklikleri birleştirdiğinizde şu app.yaml elde edilir:

runtime: python38

handlers:
- url: /.*
  script: auto

app.yaml referans sayfasından script: auto hakkında daha fazla bilgi edinin.

handlers yönergesi kaldırılıyor

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

runtime: python38

Bu işlem, varsayılan olarak tüm uygulamalarda kullanılabilen Gunicorn WSGI web sunucusunu başlatır. gunicorn ile ilgili bilginiz varsa bu, app.yaml ile varsayılan olarak başlatıldığında yürütülen komuttur:

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

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

Ancak uygulamanız belirli bir başlatma komutu gerektiriyorsa bu komut bir entrypoint yönergesiyle belirtilebilir. Bu durumda, app.yaml şu şekilde görünür:

runtime: python38
entrypoint: python main.py

Bu örnekte özellikle gunicorn yerine Flask geliştirme sunucusunun kullanılması isteniyor. Geliştirme sunucusunu başlatan kodun, 0.0.0.0 arayüzünde 8080 numaralı bağlantı noktasında başlatmak için uygulamanıza eklenmesi gerekir. Bu küçük bölümü main.py öğesinin en altına ekleyin:

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

app.yaml referans sayfasından entrypoint hakkında daha fazla bilgi edinin. Daha fazla örnek ve en iyi uygulamayı App Engine standart ortamı başlatma dokümanlarında ve App Engine esnek ortamı başlatma dokümanlarında bulabilirsiniz.

appengine_config.py ve lib öğelerini silme

appengine_config.py dosyasını ve lib klasörünü silin. App Engine, Python 3'e geçiş sırasında requirements.txt bölümünde listelenen paketleri edinir ve yükler.

appengine_config.py yapılandırma dosyası, üçüncü taraf kitaplıklarını/paketlerini tanımak için kullanılır. Bu kitaplıkları/paketleri kendiniz kopyalamış olsanız da App Engine sunucularında (yerleşik) bulunanları kullanıyor olsanız da bu dosya kullanılır. Python 3'e geçiş yaparken önemli değişikliklerin özeti:

  1. Kopyalanan üçüncü taraf kitaplıkları (requirements.txt içinde listelenmiştir) paketlenmemelidir.
  2. pip install, lib klasörüne taşınmaz. Yani lib klasörü yoktur.
  3. app.yaml içinde yerleşik üçüncü taraf kitaplıkları listelenmiyor
  4. Uygulamanın üçüncü taraf kitaplıklarına referans vermesi gerekmediğinden appengine_config.py dosyası yok

Gerekli tüm üçüncü taraf kitaplıkları requirements.txt içinde listelemeniz yeterlidir.

Uygulamayı dağıtma

Uygulamanızın çalıştığından emin olmak için yeniden dağıtın. Çözümünüzün 3. modül örnek Python 3 koduna ne kadar yakın olduğunu da doğrulayabilirsiniz. Python 2 ile olan farklılıkları görselleştirmek için kodu Python 2 sürümüyle karşılaştırın.

3. modüldeki bonus adımı tamamladığınız için tebrikler. Python 3 çalışma zamanı için yapılandırma dosyalarını hazırlama ile ilgili dokümanları inceleyin. Son olarak, sonraki adımlar ve temizleme için yukarıdaki özeti inceleyin.

Uygulamanızı hazırlama

Uygulamanızı taşıma zamanı geldiğinde main.py ve diğer uygulama dosyalarınızı 3.x'e taşımanız gerekir. Bu nedenle, 2.x uygulamanızı mümkün olduğunca "ileriyle uyumlu" hale getirmeye çalışmanız en iyi uygulamadır.

Bu konuda size yardımcı olabilecek birçok online kaynak vardır. Ancak temel ipuçlarından bazıları şunlardır:

  1. Tüm uygulama bağımlılıklarının 3.x ile tamamen 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çtiğinden emin olun.
  4. six, Future ve/veya Modernize gibi uyumluluk kitaplıklarını kullanın.
  5. 2.x ile 3. x arasındaki temel geriye dönük uyumsuzluk farklılıkları hakkında bilgi edinin.
  6. Tüm G/Ç işlemleri, Unicode ile bayt dizesi uyumsuzluklarına yol açabilir.

Örnek uygulama tüm bunlar göz önünde bulundurularak tasarlandı. Bu nedenle, yeni nesil platformu kullanmak için nelerin değiştirilmesi gerektiğini göstermeye odaklanabilmemiz amacıyla uygulama, 2.x ve 3.x sürümlerinde kutudan çıkarıldığı gibi çalışır.

8. Ek kaynaklar

App Engine taşıma modülüyle ilgili codelab sorunları/geri bildirimleri

Bu codelab ile ilgili sorun bulursanız lütfen göndermeden önce sorununuzu arayın. Arama yapma ve yeni sorunlar oluşturma bağlantıları:

Taşıma kaynakları

2. Modül (BAŞLANGIÇ) ve 3. Modül (BİTİŞ) ile ilgili depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Ayrıca, tüm App Engine geçişleri için kullanılan depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası olarak indirebilirsiniz.

Codelab

Python 2

Python 3

2. Modül

code

code

3. Modül

code

code

App Engine kaynakları

Bu özel taşıma işlemiyle ilgili ek kaynakları aşağıda bulabilirsiniz: