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

1. Genel Bakış

Bu codelab'lerden oluşan bu seri, Google App Engine (standart ortam) 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 isteğe bağlı eğitim, geliştiricilere Datastore hizmetiyle konuşmak için istemci kitaplığı olarak Cloud NDB'den Cloud Datastore'a nasıl geçiş yapılacağını gösterir. NDB'yi tercih eden geliştiriciler, Python 3 uyumlu olduğundan kullanmaya devam edebilirler. Bu nedenle, bu taşıma işlemi isteğe bağlıdır. Bu taşıma işlemi yalnızca halihazırda Cloud Datastore kullanan diğer uygulamalarla tutarlı bir kod tabanı ve paylaşılan kitaplıklar oluşturmak isteyen kullanıcılar içindir. Bu, "Arka Plan"da açıklanmaktadır. bölümüne ekleyin.

Neler öğreneceksiniz?

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

Gerekenler

  • Etkin bir GCP faturalandırma hesabı olan bir Google Cloud Platform projesi
  • Temel Python becerileri
  • Temel Linux komutlarıyla ilgili bilgi sahibi olma
  • App Engine uygulamaları geliştirme ve dağıtmayla ilgili temel bilgiler
  • Çalışan bir Modül 2 App Engine 2.x veya 3.x uygulaması.

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

Cloud NDB, uzun süreli App Engine geliştiricileri için muhteşem bir Datastore çözümü olsa da Python 3'e geçişe yardımcı olmakla birlikte App Engine geliştiricilerinin Datastore'a erişebilmesi için tek yöntem bu değildir. App Engine'in Datastore'u 2013'te kendi ürünü olarak Google Cloud Datastore'a gelince, tüm kullanıcıların Datastore'u kullanabilmesi için yeni bir istemci kitaplığı oluşturuldu.

Python 3 App Engine ve App Engine dışındaki geliştiriciler, Cloud Datastore'u kullanmaya (Cloud NDB'ye değil) yönlendirilir. Python 2 App Engine geliştiricilerinin ndb'den Cloud NDB'ye ve oradan Python 3'e bağlantı noktası oluşturmaları önerilir. Ancak Cloud Datastore'a daha fazla geçiş yapmayı da tercih edebilirler. Bu, özellikle az önce bahsedilenler gibi Cloud Datastore'u kullanan koda sahip 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ımı, kod tutarlılığı kadar bir en iyi uygulamadır ve her ikisi de aşağıda özetlendiği gibi genel bakım maliyetinin azalmasına katkıda bulunur:

Cloud NDB'den Cloud Datastore'a taşıma

  • Geliştiricilerin Datastore erişimi için tek bir kod tabanına odaklanmasını sağlar
  • Bazı kodları Cloud NDB, diğerlerini ise Cloud Datastore kullanarak muhafaza etme
  • Kod tabanında daha fazla tutarlılık ve daha iyi kodun yeniden kullanılabilirliği sağlar.
  • Genel/paylaşılan kitaplıkların daha düşük genel bakım maliyetine katkıda bulunmasını sağlar.

Bu taşıma işlemi aşağıdaki birincil adımları içerir:

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

3. Kurulum/Ön Çalışma

Eğiticinin ana bölümüne geçmeden önce projemizi oluşturalı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 2 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 (uygulamanın) etkin olduğundan emin olun.

2. Temel örnek uygulamayı al

Ön koşullardan biri, çalışan bir Modül 2 ö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ıda) veya atlamak isterseniz Modül 2 deposunu kopyalayın (bağlantıyı aşağıda bulabilirsiniz).

İster sizin ister bizimkininkini kullanın, Modül 2 kodunu BAŞLAyeceğiz. Bu Modül 3 codelab'i, her adımda size yol gösterir. Tamamlandığında, FINISH noktasındaki koda benzeyecektir. Bu eğiticinin Python 2 ve 3 sürümü mevcuttur. Bu nedenle aşağıdan doğru kod deposunu bulun.

Python 2

Python 2 Modül 2 BAŞLANGIÇ dosyalarının dizini (sizin ya da bizimki) şöyle görünmelidir:

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

Modül 2 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.

Python 3

Python 3 Modül 2 BAŞLANGIÇ dosyalarının dizini (sizin ya da bizimki) şöyle görünmelidir:

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

Python 3 için lib ve appengine_config.py kullanılmaz.

3. (Yeniden) Modül 2 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. 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 paket değişikliğidir.

1. requirements.txt öğelerini güncelle

2. Modül'ü tamamladıktan sonra requirements.txt dosyanız şu şekilde görünür:

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

requirements.txt uygulamasını, Cloud NDB kitaplığını (google-cloud-ndb) Cloud Datastore kitaplığının en yeni sürümüyle (google-cloud-datastore) değiştirerek ve Flask girişini koruyarak güncelleyin. Cloud Datastore'un Python 2 ile uyumlu son sürümünün 1.15.3 olduğunu da göz önünde bulundurun:

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

Deponun bu eğitime kıyasla daha düzenli bir şekilde yönetildiğini unutmayın. Bu nedenle, requirements.txt dosyasının daha yeni sürümleri yansıtıyor 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. Yukarıdaki sürüm numaraları, bu codelab'in en son güncellendiğinde en son ne zaman güncellendiğini gösterir.

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

Diğer yapılandırma dosyaları (app.yaml ve appengine_config.py) önceki taşıma adımında olduğu gibi kalmalıdır:

  • app.yaml, üçüncü tarafların gruplandırılmış grpcio ve setuptools paketlerine (hâlâ referans vermelidir).
  • appengine_config.py (hâlâ) pkg_resources ve google.appengine.ext.vendor öğelerini lib bölgesindeki üçüncü taraf kaynaklarına yönlendirmelidir.

Şimdi uygulama dosyalarına geçelim.

5. Uygulama dosyalarını güncelle

template/index.html bölümünde değişiklik yok, ancak main.py için birkaç güncelleme var.

1. İçe aktarılanlar

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

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

google.cloud.ndb içe aktarma işlemini, Cloud Datastore için bir içe aktarma işlemiyle değiştirin: google.cloud.datastore. Datastore istemci kitaplığı, bir Varlık içinde zaman damgası alanının otomatik olarak oluşturulmasını desteklemediğinden manuel olarak bir zaman damgası oluşturmak için standart kitaplık datetime modülünü içe aktarın. Kural olarak, standart kitaplık içe aktarmaları üçüncü taraf paket içe aktarmalarının üstündedir. Bu değişiklikleri tamamladığınızda, kod aşağıdaki gibi görünmelidir:

  • SONRASI:
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 Modül 2 örnek uygulaması, NDB veri modeli sınıfı ve alanları şu şekilde oluşturulur:

  • ÖNCE:
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 konuşmak için hâlâ bir istemciye ihtiyacınız var. Bu nedenle, ndb.Client() değerini datastore.Client() olarak değiştirin. Datastore kitaplığı daha "esnek" ve "önceden beyan etmeden" Varlıklar oluşturmanıza olanak tanır. daha fazla bilgi edineceksiniz. Bu güncellemeden sonra main.py uygulamasının bu bölümü şöyle görünecek:

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

3. Datastore erişimi

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

  • ÖNCE:
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, Varlıkınızdaki gruplandırılmış nesneleri bir "anahtar" ile tanımlayan genel bir varlık oluşturun. Veri kaydını, anahtar/değer çiftlerinin JSON nesnesiyle (Python dict) oluşturun, ardından beklenen put() ile Datastore'a yazın. Datastore ile sorgulama benzer ancak daha basittir. Burada eşdeğer Datastore kodunun farkını görebilirsiniz:

  • SONRASI:
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çin işlev gövdelerini yukarıdaki sürümle aynı şekilde güncelleyin. root() adlı ana işleyicide herhangi bir değişiklik yok. Bu değişiklikler tamamlandıktan sonra uygulamanız artık Cloud Datastore'u kullanacak şekilde donatılmış ve teste hazır hale gelmiştir.

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 3 depo klasörlerinde bulunanlarla 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ı

3. Modül codelab'ini tamamladığınız için tebrikler. Artık Datastore'a erişmek için hem Cloud NDB hem de Cloud Datastore istemci kitaplıklarını kullanabileceğinizi biliyorsunuz. İkinci sürüme geçerek paylaşılan kitaplıklar, ortak kod ve kod yeniden kullanımı gibi avantajlardan yararlanabilir, böylece tutarlılık ve daha düşük bakım maliyeti elde edebilirsiniz.

İ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

Burada, sonraki taşıma modüllerini inceleyebilirsiniz:

  • Modül 3 Bonusu: Python 3 ve yeni nesil App Engine çalışma zamanına nasıl bağlantı kuracağınızı öğrenmek için bonus bölümüne devam edin.
  • 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ıza gerek yoktur
    • Uygulamanızı Python 3'e taşımış olmanız gerekir
  • 6. Modül: Cloud Firestore'a geçiş
    • Firebase özelliklerine erişmek için Cloud Firestore'a geçiş yapın
    • Cloud Firestore, Python 2'yi desteklese de bu codelab yalnızca Python 3'te kullanılabilir.

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, üçüncü taraf paketlerine erişimin kolaylaştırılmasıdır: app.yaml ürününde yerleşik paketler belirtmeye veya yerleşik olmayan kitaplıkları kopyalama ya da yüklemeye gerek yoktur; requirements.txt içinde listelenmeleri için dolaylı olarak yüklenirler.

Örneğimiz çok temel ve Cloud Datastore'un Python 2-3 uyumlu olması nedeniyle hiçbir uygulama kodunun 3.x'e açıkça bağlanması gerekmez: Uygulama, değiştirilmemiş 2.x ve 3.x sürümlerinde çalışır. Dolayısıyla, bu durumda yalnızca gerekli değişiklikler yapılandırmadadır:

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

main.py ve templates/index.html uygulama dosyalarında değişiklik yapılmadı.

requirements.txt öğelerini güncelle

Python 2'yi destekleyen Cloud Datastore'un son sürümü 1.15.3'tür. requirements.txt dosyasını Python 3 için en son sürümle güncelleyin (artık daha yeni bir sürüm olabilir). Bu eğitim yazıldığında en son sürüm 2.1.0 idi. Bu nedenle, ilgili satırı aşağıdaki gibi (veya en son sürümü) görünecek şekilde düzenleyin:

google-cloud-datastore==2.1.0

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. 3. 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 bilgiyi app.yaml referans sayfasından edinebilirsiniz.

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, entrypoint yönergesiyle belirtilebilir ve sonuçta app.yaml aşağıdaki gibi görünür:

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 bilgiyi app.yaml referans sayfasından edinebilirsiniz. Daha fazla örnek ve en iyi uygulama için App Engine standart ortamı başlangıç belgelerine ve App Engine esnek ortamı başlangıç dokümanlarına 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 3 ö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.

3. 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 yukarıdaki önceki özeti 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 2 (START) ve Modül 3 (FINISH) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bu dosyalara tüm App Engine taşıma işlemleri için depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası indirebilirsiniz.

Codelab

Python 2

Python 3

2. Modül

kod

kod

3. Modül

kod

kod

App Engine kaynakları

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