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) 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 eğitimde, App Engine'in yerleşik ndb (Next Database) istemci kitaplığından Cloud NDB istemci kitaplığına nasıl geçiş yapacağınız açıklanmaktadır.
Öğrenecekleriniz
- App Engine
ndbkitaplığını kullanın (kitaplığı bilmiyorsanız) ndb'den Cloud NDB'ye taşıma- Uygulamanızı Python 3'e taşıma
Gerekenler
- Aşağıdakileri içeren bir Google Cloud Platform projesi:
- Temel Python becerileri
- Yaygın Linux komutları hakkında çalışma bilgisi
- App Engine uygulamalarını geliştirme ve dağıtma hakkında temel bilgiler
- Çalışan bir Module 1 App Engine uygulaması
Anket
Bu codelab'i nasıl kullanacaksınız?
2. Arka plan
1. modülde, App Engine'in yerleşik webapp2 web çerçevelerini Flask'e 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 ediyoruz.
Bu taşıma işlemini tamamlayarak şunları yapabilirsiniz:
- Python 3'e ve yeni nesil App Engine çalışma zamanına geçiş
- Cloud Datastore'a taşıma (App Engine dışı uygulamalar için istemci kitaplığı)
- Python 2 (veya 3) uygulamanızı container mimarisine alın ve Cloud Run'a taşıyın
- App Engine (push) görev sıralarının kullanımını ekleyin ve ardından Cloud Tasks'e geçin.
Ancak henüz bu noktada değiliz. Sonraki adımları düşünmeden önce bu codelab'i tamamlayın. Bu eğitimdeki taşıma işlemi şu temel adımlardan oluşur:
- Kurulum/Ön Hazırlık
- Cloud NDB kitaplığını ekleme
- Uygulama dosyalarını güncelleme
3. Kurulum/Ön Hazırlık
Eğitimin ana bölümüne başlamadan önce projemizi ayarlayalım, kodu alalım ve ardından temel uygulamayı dağıtalım. Böylece, çalışan bir kodla başladığımızı biliriz.
1. Proje oluşturma
1. 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ı olduğundan ve App Engine'in etkinleştirildiğinden emin olun.
2. Temel örnek uygulamayı edinme
Ön koşullardan biri, çalışan bir 1. Modül örnek uygulamasına sahip olmaktır. Bu eğitimi tamamladıysanız çözümünüzü kullanın. Dilerseniz formu şimdi (yukarıdaki bağlantı) doldurabilir veya atlamak isterseniz 1. Modül deposunu (aşağıdaki bağlantı) kopyalayabilirsiniz.
Sizinkini veya bizimkini kullanıyor olsanız da 1. Modül kodunu KULLANMAYA BAŞLAYACAĞIZ. Bu 2. Modül kod laboratuvarı, her adımda size yol gösterir. Tamamlandığında, KODUN SON HALİ'ndeki koda benzemelidir (Python 2'den 3'e isteğe bağlı "bonus" bağlantı dahil):
- BAŞLANGIÇ: 1. modül kodu
- BİTİRME: Modül 2 Python 2 kodu (BONUS: Python 3 kodu)
- Deponun tamamı (klonlamak veya ZIP olarak indirmek için)
STARTing Module 1 kod klasörünüzde aşağıdaki içerikler bulunmalıdır:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
1. 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.
3. 1. Modül uygulamasını (yeniden) dağıtma
Şimdi yapmanız gereken kalan ön hazırlık adımları:
- Gerekirse
gcloudkomut satırı aracıyla ilgili bilgilerinizi tazeleyin. - 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. Yapılandırma dosyalarını güncelleyin (Cloud NDB kitaplığını ekleyin)
Orijinal App Engine'de yerleşik olarak sunulan birçok hizmet kendi ürünlerine dönüştü. Datastore da bunlardan biri. Günümüzde App Engine dışındaki uygulamalar Cloud Datastore'u kullanabilir. Uzun süredir ndb kullananlar için Google Cloud ekibi, Cloud Datastore ile iletişim kurmak üzere Cloud NDB istemci kitaplığını oluşturdu. Hem Python 2 hem de 3 için kullanılabilir.
App Engine ndb yerine Cloud NDB'yi kullanmak için onay dosyalarını güncelleyelim ve uygulamamızı değiştirelim.
1. requirements.txt adresini güncelleyin
1. modülde, uygulamamızın tek harici bağımlılığı Flask'tı. Şimdi Cloud NDB'yi ekleyeceğiz. requirements.txt dosyanızın 1. Modülün sonunda nasıl göründüğünü aşağıda bulabilirsiniz:
- ÖNCESİ:
Flask==1.1.2
App Engine'den taşıma işlemi için Cloud NDB kitaplığı (google-cloud-ndb) gerekir. Bu nedenle, paketini requirements.txt'ye ekleyin.ndb
- ŞU TARİHTEN SONRA:
Flask==1.1.2
google-cloud-ndb==1.7.1
Bu codelab yazıldığında önerilen en son sürüm 1.7.1'di ancak depodaki requirements.txt daha yeni bir sürüm 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.
Varsa ve yukarıda oluşturmadıysanız lib klasörünüzü silin. Şimdi, güncellenen kitaplıkları pip install -t lib -r requirements.txt komutuyla (yeniden) yükleyin. Gerekirse pip yerine pip2 kullanın.
2. app.yaml adresini güncelleyin
google-cloud-ndb gibi Google Cloud istemci kitaplıkları eklemek için birkaç koşul gerekir. Bu koşulların tümü, Google sunucularında zaten bulunan 3. taraf paketleri olan "yerleşik" kitaplıkların dahil edilmesiyle ilgilidir. Bunları requirements.txt içinde listelemezsiniz veya pip install ile kopyalamazsınız. Yalnızca şu şartlar gerekir:
app.yamliçinde yerleşik kitaplıkları belirtin.- Kullanabilecekleri kopyalanmış üçüncü taraf kitaplıklarına (
libiçinde) yönlendirin.
1. modüldeki STARTing app.yaml:
- ÖNCESİ:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
Şimdi yeni bir libraries bölümünde app.yaml öğesine aşağıdaki satırları ekleyerek grpcio ve setuptools adlı üçüncü taraf paketlenmiş paket çiftine referans verin:
libraries:
- name: grpcio
version: 1.0.0
- name: setuptools
version: 36.6.0
Bu yerleşik kitaplıklar neden kullanılır? 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 simgesinin dahil edilmesinin gerekçesini aşağıda bulabilirsiniz.
- ŞU TARİHTEN SONRA:
Yukarıdaki değişiklikleri yaptıktan sonra güncellenen app.yaml ş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 adresini güncelleyin
setuptools kitaplığının bir parçası olan pkg_resources aracı, yerleşik üçüncü taraf kitaplıklarının paketlenmiş kitaplıklara erişmesine izin vermek için kullanılır. appengine_config.py uygulamasını, pkg_resources kullanarak lib içindeki paketlenmiş kitaplıklara yönlendirecek şekilde güncelleyin. Bu değişikliği tamamladığı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üncelleme
Yapılandırma dosyasıyla ilgili işlemler tamamlandıktan sonra artık ndb'den Cloud NDB'ye geçebilirsiniz. Taşıma işlemini tamamlamak için içe aktarılan kitaplıkları güncelleyin ve main.py içinde bağlam yönetiminin kullanımını ekleyin.
1. İçe aktarılanlar
main.py içinde aşağıdaki içe aktarma değişikliğini yapın:
- ÖNCESİ
from google.appengine.ext import ndb
- ŞU TARİHTEN SONRA:
from google.cloud import ndb
App Engine kitaplığından Google Cloud kitaplığına geçiş bazen bu örnekteki kadar kolay olabilir. Tam Google Cloud ürünleri haline gelen yerleşik hizmetler için google.appengine yerine google.cloud ürününden özellikler içe aktarırsınız.
2. Veri deposu erişimi
Cloud NDB kitaplığını kullanabilmek için uygulamanızda Python bağlam yöneticileri kullanılmalıdır. Bu kaynakların amacı, kullanılabilmeleri için önce edinilmeleri gerektiği şekilde kaynaklara erişimi "sınırlamaktır". Bağlam yöneticileri, Kaynak Ayırma Başlatmadır (veya RAII) olarak bilinen bilgisayar bilimi kontrol tekniğine dayanır. Bağlam yöneticileri, Python dosyalarıyla (erişilebilmesi için açılması gerekir) ve eşzamanlılık ile kullanılır. "Kilitler", "kritik bölümdeki" kodun yürütülebilmesi için alınmalıdır.
Benzer şekilde, Cloud NDB'nin Datastore ile iletişim kurabilmesi için herhangi bir Datastore komutu yürütülmeden önce istemci bağlamını edinmeniz gerekir. Öncelikle, main.py'da ds_client = ndb.Client() ekleyerek Flask başlatma işleminden hemen sonra bir istemci (ndb.Client()) oluşturun:
app = Flask(__name__)
ds_client = ndb.Client()
Pythonwith komutu yalnızca bir nesnenin bağlamını elde etmek için kullanılır. Datastore'a erişen tüm kod bloklarını with ifadeleriyle sarmalayın.
Aşağıda, Datastore'a yeni bir öğe yazmak ve en son eklenen öğeleri görüntülemek için 1. modüldeki işlevler yer almaktadır:
- ÖNCESİ:
Bağlam yönetimi olmadan orijinal kod:
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))
- ŞU TARİHTEN SONRA:
Şimdi with ds_client.context(): 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ı 1. modüldekiyle 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)
Uygulama kodu ile veri erişimi arasında net bir ayrım yapılması en iyi uygulamadır. Bu sayede, bu taşımada yaptığımız gibi temel veri depolama mekanizması değiştirildiğinde ana uygulama kodunuz değişmez.
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 Module 2 repo'daki 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:

2. Modül codelab'ini tamamladığınız için tebrik ederiz. Datastore ile ilgili olarak bu serideki şiddetle tavsiye edilen son taşıma işlemi olduğundan, taşıma işlemini tamamladınız.
İ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 sonraki adımınızı istediğiniz gibi belirleyebilirsiniz. Şu seçeneklerden herhangi birini belirleyin:
- 2. Modül Bonusu: Python 3'e taşıma ve yeni nesil App Engine çalışma zamanını keşfetmek için bu eğitimin 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
taskqueuepush görevleri ekler. - 8. modülde kullanıcıları Cloud Tasks'a geçişe hazırlar.
- 1. modül uygulamasına App Engine
- 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
Dockerfilehakkında hiçbir şey bilmeniz gerekmez. - Uygulamanızı Python 3'e taşımış olmanız gerekir.
- Modül 3:
- Cloud NDB'den Cloud Datastore'a Datastore erişimini modernleştirme
- Bu kitaplık, Python 3 App Engine uygulamaları ve App Engine olmayan uygulamalar için kullanılır.
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. app.yaml içinde yerleşik paketleri belirtmeye gerek yoktur ve yerleşik olmayan kitaplıkları kopyalamak veya yüklemek de gerekmez. Bu kitaplıklar, requirements.txt içinde listelendikleri için örtülü olarak yüklenir.
Örneğimiz çok basit olduğundan ve Cloud NDB 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ırmada yapılır:
- Python 3'e referans vermek için
app.yamlifadesini basitleştirin ve üçüncü taraf kitaplıklarını kaldırın. - Artık gerekli olmadıkları için
appengine_config.pyvelibklasörünü silin.
main.py'ya ek olarak requirements.txt ve templates/index.html dosyaları değişmeden kalır.
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. Hatırlatmak gerekirse app.yaml, 2. Modül'ün sonunda şu şekildeydi:
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
script: auto hakkında daha fazla bilgiyi belgelendirme sayfasında bulabilirsiniz.
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ın belirli bir başlatma komutu gerektiriyorsa bu komut, 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)
entrypoint hakkında daha fazla bilgiyi belge sayfasında bulabilirsiniz. Daha fazla örnek ve en iyi uygulamayı App Engine Standart başlatma dokümanlarında ve App Engine Esnek 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:
- Kopyalanan üçüncü taraf kitaplıkları (
requirements.txtiçinde listelenmiştir) paketlenmemelidir. pip install,libklasörüne taşınmaz. Yanilibklasörü yoktur.app.yamliçinde yerleşik üçüncü taraf kitaplıkları listelenmiyor- Uygulamanın üçüncü taraf kitaplıklarına referans vermesi gerekmediğinden
appengine_config.pydosyası 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 2. 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.
Tebrikler! 2. modüldeki bonus adımı tamamladınız. 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 (önceki) Özet/Temizleme sayfasını 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:
- Tüm uygulama bağımlılıklarının 3.x ile tamamen uyumlu olduğundan emin olun.
- Uygulamanızın en az 2.6 (tercihen 2.7) sürümünde çalıştığından emin olun.
- Uygulamanın test paketinin tamamını (ve minimum% 80 kapsam) geçtiğinden emin olun.
six, Future ve/veya Modernize gibi uyumluluk kitaplıklarını kullanın.- 2.x ile 3. x arasındaki temel geriye dönük uyumsuzluk farklılıkları hakkında bilgi edinin.
- 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ı
1. Modül (BAŞLANGIÇ) ve 2. Modül (BİTİŞ) için depo klasörlerinin bağlantılarını aşağıdaki tabloda bulabilirsiniz. Bu dokümanlara, tüm App Engine codelab'lerinin taşınması için kullanılan depodan da erişilebilir. Bu depoyu klonlayabilir veya ZIP dosyası olarak indirebilirsiniz.
Codelab | Python 2 | Python 3 |
(yok) | ||
2. Modül |
App Engine kaynakları
Bu özel taşıma işlemiyle ilgili ek kaynakları aşağıda bulabilirsiniz:
- Python NDB referansları
- (ESKİ) Python 2.5 ve
webappsürümünden 2.7 vewebapp2sürümüne taşıma - Python 3'e ve GAE yeni nesil çalışma zamanına taşıma
- Genel