Anda dapat menggunakan server pengembangan lokal untuk menyimulasikan menjalankan aplikasi App Engine dalam produksi serta menggunakannya untuk mengakses layanan paket App Engine.
Lingkungan simulasi menerapkan beberapa pembatasan sandbox, seperti fungsi sistem terbatas dan impor modul Python 2, tetapi tidak yang lainnya, seperti waktu tunggu atau kuota permintaan.
Server pengembangan lokal juga menyimulasikan layanan yang disediakan oleh library di SDK untuk App Engine, termasuk Datastore, Memcache, dan Task Queues, dengan menjalankan tugasnya secara lokal. Saat aplikasi Anda berjalan di server pengembangan, Anda masih dapat melakukan panggilan API jarak jauh ke infrastruktur produksi menggunakan endpoint HTTP Google API.
Sebelum memulai
Karena Python 2.7 telah mencapai akhir dukungan, Anda tidak dapat lagi menggunakan
dev_appserver.py
versi terbaru untuk menjalankan aplikasi
secara lokal. Untuk mendownload versi devapp_server.py
yang diarsipkan, ikuti langkah-langkah
berikut:
Dari arsip, download folder zip yang berisi server
dev_appserver.py
untuk runtime yang telah mencapai akhir dukungan.Ekstrak konten direktori ke sistem file lokal Anda, seperti ke direktori
/home
. Anda dapat menemukandev_appserver.py
di direktorigoogle_appengine/
.
Menyiapkan server pengembangan lokal
Untuk menjalankan alat server pengembangan lokal, Anda harus menyiapkan hal-hal berikut:
Pastikan Anda telah menginstal penafsir Python 2 versi 2.7.12 atau yang lebih baru.
Tetapkan variabel lingkungan
DEVAPPSERVER_ROOT
di shell ke jalur penafsir Python 2 Anda.
Menjalankan server pengembangan lokal
Setelah menyiapkan server pengembangan lokal dan membuat file konfigurasi
app.yaml
untuk aplikasi Anda, Anda dapat menggunakan perintah dev_appserver.py
untuk
menjalankan aplikasi secara lokal.
Untuk memulai server pengembangan lokal:
Dalam direktori yang berisi file konfigurasi
app.yaml
Anda, jalankan perintahdev_appserver.py
.Tentukan jalur direktori ke aplikasi Anda, misalnya:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py [PATH_TO_YOUR_APP]
Atau, Anda dapat menentukan file konfigurasi layanan tertentu, misalnya:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py app.yaml
Untuk mengubah port, sertakan opsi
--port
:python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
Ganti
[DEVAPPSERVER_ROOT]
dengan jalur ke folder tempat Anda mengekstrak versi yang diarsipkan daridevapp_server.py
.Untuk mempelajari opsi perintah
dev_appserver.py
lebih lanjut, lihat Opsi server pengembangan lokal.Server pengembangan lokal sekarang berjalan dan memproses permintaan. Anda dapat membuka http://localhost:8080/ di browser web untuk melihat cara kerja aplikasi.
Jika Anda menentukan port kustom dengan opsi
--port
, jangan lupa untuk membuka browser ke port tersebut.
Untuk menghentikan server lokal dari command line, tekan tombol berikut:
- macOS atau Linux: Control+C
- Windows: Control+Break
Menentukan ID aplikasi
Untuk mengakses ID Aplikasi Anda di server lokal, misalnya untuk melakukan spoofing alamat email, gunakan fungsi
get_application_id()
. Untuk mendapatkan nama host aplikasi yang sedang berjalan, gunakan fungsi
get_default_version_hostname()
.
Mendeteksi lingkungan runtime aplikasi
Untuk menentukan apakah kode Anda berjalan di produksi atau di server pengembangan lokal, Anda dapat memeriksa nilai variabel lingkungan SERVER_SOFTWARE
:
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
# Production
else:
# Local development server
Menggunakan Datastore lokal
Server pengembangan lokal menyimulasikan datastore App Engine menggunakan file lokal yang tetap ada di antara pemanggilan server lokal.
Untuk informasi selengkapnya tentang indeks dan index.yaml
, lihat halaman Indeks Datastore dan Konfigurasi Indeks Datastore.
Menjelajahi Datastore lokal
Jika aplikasi Anda telah menulis data ke Datastore lokal menggunakan server pengembangan lokal, Anda dapat mencarinya di konsol pengembangan lokal.
Untuk menjelajahi Datastore lokal:
Akses Viewer Datastore di konsol pengembangan lokal. (URL-nya adalah
http://localhost:8000/datastore
.)Lihat konten Datastore lokal Anda.
Menentukan kebijakan alokasi ID
Untuk App Engine produksi, Anda dapat menetapkan Datastore untuk membuat ID entity secara otomatis.
Meskipun kebijakan penetapan ID otomatis untuk server produksi benar-benar berbeda dengan yang digunakan oleh server pengembangan, Anda juga dapat menetapkan kebijakan alokasi ID otomatis untuk server lokal.
Untuk menentukan kebijakan penetapan ID otomatis, gunakan opsi --auto_id_policy
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --auto_id_policy=sequential
Ganti:
DEVAPPSERVER_ROOT dengan jalur ke folder tempat Anda mengekstrak versi yang diarsipkan dari
devapp_server.py
.--auto_id_policy
dengan salah satu dari berikut ini:scattered
jika (default) ID ditetapkan dari urutan yang tidak berulang dari bilangan bulat yang kurang lebih terdistribusi secara seragam.sequential
jika ID ditetapkan dari urutan bilangan bulat yang berurutan.
Mengosongkan Datastore lokal
Guna mengosongkan datastore lokal untuk aplikasi, panggil server pengembangan lokal sebagai berikut:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --clear_datastore=yes app.yaml
Ganti DEVAPPSERVER_ROOT dengan jalur ke folder tempat Anda
mengekstrak versi yang diarsipkan dari devapp_server.py
.
Mengubah lokasi Datastore lokal
Untuk mengubah lokasi yang digunakan untuk file datastore, gunakan opsi --datastore_path
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml
Ganti DEVAPPSERVER_ROOT dengan jalur ke folder tempat Anda
mengekstrak versi yang diarsipkan dari devapp_server.py
.
Menggunakan layanan Pengguna
App Engine menyediakan Layanan Pengguna untuk menyederhanakan autentikasi dan otorisasi untuk aplikasi Anda. Server pengembangan lokal menyimulasikan perilaku Akun Google dengan halaman login dan logout-nya sendiri. Saat berjalan di bawah server
pengembangan lokal, fungsi
users.create_login_url
dan users.create_logout_url
menampilkan URL untuk /_ah/login
dan /_ah/logout
di server lokal.
Menggunakan Email
Server pengembangan lokal dapat mengirim email untuk panggilan ke layanan email App Engine menggunakan server SMTP atau penginstalan lokal Sendmail.
Menggunakan SMTP
Untuk mengaktifkan dukungan email dengan server SMTP, panggil dev_appserver.py
seperti
berikut:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
--smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]
Ganti:
[DEVAPPSERVER_ROOT]
dengan jalur ke folder tempat Anda mengekstrak versi yang diarsipkan daridevapp_server.py
.- Opsi
--smtp_host
,--smtp_port
,--smtp_user
, dan--smtp_password
dengan nilai konfigurasi Anda sendiri.
Menggunakan Sendmail
Untuk mengaktifkan dukungan email dengan Sendmail, panggil dev_appserver.py
sebagai berikut:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
Ganti [DEVAPPSERVER_ROOT]
dengan jalur ke folder tempat Anda
mengekstrak versi yang diarsipkan dari devapp_server.py
.
Server lokal akan menggunakan perintah sendmail
untuk mengirim pesan email dengan konfigurasi default penginstalan Anda.
Menggunakan URL-fetch
Jika aplikasi Anda menggunakan URL-fetch API untuk membuat permintaan HTTP, server pengembangan lokal akan membuat permintaan tersebut langsung dari komputer Anda. Perilaku URL-fetch di server lokal dapat berbeda dengan App Engine produksi jika Anda menggunakan server proxy untuk mengakses situs.
Menggunakan Konsol Interaktif
Konsol Interaktif memungkinkan developer memasukkan kode Python arbitrer ke dalam formulir web dan mengeksekusinya di dalam lingkungan aplikasi mereka; memberikan akses yang sama ke lingkungan dan layanan aplikasi seperti file .py di dalam aplikasi itu sendiri.
Untuk menggunakan Konsol Interaktif:
Akses Konsol interaktif di konsol pengembangan lokal. (URL-nya adalah
http://localhost:8000/console
.)Masukkan kode Python apa pun yang ingin Anda jalankan di area teks, lalu kirimkan formulir untuk mengeksekusinya. Misalnya, kode berikut akan menambahkan entity Datastore bernama
Greeting
dengan konten teksHello
:from google.appengine.ext import ndb class Greeting(ndb.Model): content = ndb.TextProperty() e = Greeting(content="Hello") e.put()
Men-debug dengan debugger Python
Untuk menggunakan debugger Python (pdb
):
Tambahkan baris berikut ke kode Anda:
import pdb; pdb.set_trace();
dev_appserver
akan rusak pada tahap ini dan dimasukkan ke dalam REPLpdb
(read–eval–print loop), sehingga Anda dapat men-debug kode dari command line.Jika aplikasi Anda membuat beberapa permintaan simultan yang memanggil
pdb.set_trace()
, beberapa sesi proses debug akan dimulai secara serentak, yang masing-masing mengirimkan output keSTDOUT
. Untuk menghindari hal ini, serialisasi permintaan Anda dengan menonaktifkan dukungan multi-threading dan multi-pemrosesandev_appserver
, seperti berikut:Nonaktifkan multi-threading untuk:
- Semua layanan yang menggunakan flag
--threadsafe_override=false
. - Satu layanan yang menggunakan flag
--threadsafe_override=<SERVICENAME>:false
. - Beberapa layanan yang menggunakan flag
--threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false
.
- Semua layanan yang menggunakan flag
Nonaktifkan multipemrosesan untuk:
- Semua layanan yang menggunakan flag
--max_module_instances=1
. - Satu layanan yang menggunakan flag
--max_module_instances=<SERVICENAME>:1
. - Beberapa layanan yang menggunakan flag
--max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1
.
- Semua layanan yang menggunakan flag