使用本機開發伺服器

本機開發伺服器會模擬 App Engine Java 執行階段環境及其所有的服務,包括 Datastore。

事前準備

由於 Java 8 已達到支援期限,您無法再使用最新版本的 dev_appserver.py 在本機執行應用程式。如要下載 devapp_server.py 的封存版本,請按照下列步驟操作:

  1. 存檔中,下載包含 dev_appserver.py 伺服器的壓縮資料夾,以便針對已停止支援的執行階段使用。

  2. 將目錄的內容解壓縮到本機檔案系統,例如 /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:

  1. 如前所述啟動開發伺服器。
  2. 前往開發控制台
  3. 按一下左側導覽欄中的 [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 系統屬性設為 sequentialscattered

-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 版本的伺服器。