本機開發伺服器會模擬 App Engine Java 執行階段環境及其所有的服務,包括 Datastore。
事前準備
由於 Java 8 已達到支援期限,您無法再使用最新版本的 dev_appserver.py
在本機執行應用程式。如要下載 devapp_server.py
的封存版本,請按照下列步驟操作:
從存檔中,下載包含
dev_appserver.py
伺服器的壓縮資料夾,以便針對已停止支援的執行階段使用。將目錄的內容解壓縮到本機檔案系統,例如
/home
目錄。您可以在google_appengine/google/appengine/tools/java/bin
目錄中找到dev_appserver.py
。
執行開發網頁伺服器
如要瞭解如何為您的應用程式設定系統屬性和環境變數,請參閱要求的處理方式。
您也可以從命令提示字元執行開發網路伺服器。要執行的指令位於 SDK 目錄中,相對路徑為 google_appengine/google/appengine/tools/java/bin
。
Windows 指令語法:
google_appengine\google\appengine\tools\java\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]
Linux 或 macOS 指令語法:
google_appengine/google/appengine/tools/java/bin/java_dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]
指令會使用您應用程式的 WAR 目錄位置做為引數。
停止開發伺服器
如要停止網路伺服器,請按下 Ctrl-C 鍵。
偵測應用程式執行階段環境
如要判定程式碼是在實際工作環境或本機開發伺服器中執行,請檢查 SystemProperty.environment.value()
方法的值。例如:
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
// Production
} else {
// Local development server
// which is: SystemProperty.Environment.Value.Development
}
使用本機 Datastore 模擬器
開發網路伺服器會使用您電腦的本機檔案 Datastore 模擬 Datastore。Datastore 的名稱是 local_db.bin
,建立在 WEB-INF /appengine-generated/
目錄的應用程式 WAR 目錄中。此檔案未隨同您的應用程式上傳。
此 Datastore 會持續存在於網路伺服器叫用之間,因此下次執行網路伺服器時,仍可使用您儲存的資料。如要清除 Datastore 的內容,請將伺服器關機,然後刪除這個檔案。
如 Datastore 索引設定所述,開發伺服器會根據應用程式在測試期間執行的查詢,產生應用程式所需的 Datastore 索引設定。這樣會在 WAR 的 WEB-INF/appengine-generated/
目錄中產生名稱為 datastore-indexes-auto.xml
的檔案。如要停用自動索引設定,請使用適用於 <datastore-indexes>
元素的 autoGenerate="false"
屬性,在 WEB-INF/
目錄中建立或編輯 datastore-indexes.xml
檔案。
瀏覽開發服務器中的 Datastore
如何使用開發網路伺服器瀏覽本機 Datastore:
- 如前所述啟動開發伺服器。
- 前往開發控制台。
- 按一下左側導覽欄中的 [Datastore Viewer] (Datastore 檢視器),以檢視您的本機 Datastore 內容。
Datastore 一致性模型
根據預設,本機 Datastore 經過設定,將沒有立即顯示在全域查詢的 Datastore 寫入百分比設為 10%。
如要調整此一致性程度,請設定 datastore.default_high_rep_job_policy_unapplied_job_pct
系統屬性值,此值應與您希望應用程式呈現的最終一致性相互對應。
-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20
如要使用命令提示字元 java_dev_appserver.sh
設定此屬性,您必須使用 --jvm_flag=...
設定屬性:
google_appengine/google/appengine/tools/java/bin/java-dev_appserver.sh --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20
datastore.default_high_rep_job_policy_unapplied_job_pct
的有效範圍介於 0 和 100 之間。如果您使用超出此範圍的數字,將會收到錯誤訊息。
指定自動 ID 分配政策
您可以設定本機 Datastore 如何指派自動實體 ID。
開發伺服器支援以下的自動 ID 分配政策:
sequential
- 從連續的整數序列指派 ID。
scattered
- 從大致平均分佈且不重複的整數序列指派 ID。
本機 Datastore 中的預設政策為 scattered
。
如要指定自動 ID 政策,請將 datastore.auto_id_allocation_policy
系統屬性設為 sequential
或 scattered
。
-Ddatastore.auto_id_allocation_policy=scattered
如要透過傳送至 dev_appserver 巨集的標記設定此系統屬性:
java_dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered
模擬使用者帳戶
開發網頁伺服器使用自己的登入與登出網頁,即可模擬「Google 帳戶」。在開發伺服器執行時,產生登入和登出網址的方法會回傳本機伺服器上的 /_ah/login
和 /_ah/logout
網址。
開發登入頁面提供表單,可讓您輸入電子郵件地址。工作階段會使用您輸入的任何電子郵件地址做為現用使用者。
若要讓應用程式將登入的使用者視為管理員,請勾選表單上的 [以管理員身分登入] 核取方塊。
使用網址擷取
當應用程式使用 URL Fetch API 發出 HTTP 要求時,開發網頁伺服器會直接從您的電腦發出要求。如果您使用 Proxy 伺服器存取網站,應用程式的行為可能會與應用程式在 App Engine 上執行時的行為不同。
開發控制台
開發網頁伺服器包括控制台網路應用程式。您可以使用控制台瀏覽本機 Datastore。
如要存取控制台,請前往伺服器上的 /_ah/admin
網址:http://localhost:8080/_ah/admin
指令列引數
開發伺服器指令支援以下的指令列引數:
--address=...
-
伺服器使用的主機位址。需設定此位址才能使用網路上的其他電腦存取開發伺服器。若將位址設為
0.0.0.0
,就能同時進行 localhost 存取和主機名稱存取。預設值:localhost
。 --default_gcs_bucket=...
-
設定預設的 Google Cloud Storage 值區名稱。
--disable_update_check
-
若有指定,開發伺服器並不會聯絡 App Engine 以檢查是否有可用的新版本 SDK。根據預設,伺服器會在啟動時檢查新版本,並且在有可用的新版本時顯示訊息。
--generated_dir=...
-
設定建立產生檔案所在的目錄。
--help
-
顯示實用訊息後退出。
--jvm_flag=...
-
將指定的標記傳遞為 JVM 引數。可以重複執行以提供多個標記。
--port=...
-
伺服器使用的連接埠號碼,預設值為
8080
。 --sdk_root=...
-
如果與工具位置不同,則為 gcloud CLI 的路徑。
--server=...
-
用於判定最新 SDK 版本的伺服器。