使用本機開發伺服器

您可以使用本機開發伺服器模擬在實際工作環境中執行 App Engine 應用程式,也可以使用本機開發伺服器存取 App Engine 套裝服務。

模擬的環境會強制執行一些沙箱限制,例如有限的系統功能和 Go 1.11 模組匯入,但不包括要求逾時或配額等限制。

App Engine 適用的 SDK 所含程式庫提供多項服務 (包括 Datastore、Memcache 和工作佇列),而本機開發伺服器也會在本機中執行這些服務的工作,以便進行模擬。在開發伺服器中執行應用程式時,仍可使用 Google API HTTP 端點對正式基礎架構進行遠端 API 呼叫。

事前準備

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

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

  2. 將目錄內容解壓縮到本機檔案系統,例如 /home 目錄。您可以在 google_appengine/ 目錄中找到 dev_appserver.py

設定本機開發伺服器

如要執行本機開發伺服器工具,您必須設定下列項目:

  1. 確認您已安裝 Python 2 版本 2.7.12 以上的轉譯器。

  2. 將殼層中的 DEVAPPSERVER_ROOT 環境變數設為 Python 2 轉譯器的路徑。

執行本機開發伺服器

設定本機開發伺服器並為應用程式建立 app.yaml 設定檔後,您就可以使用 dev_appserver.py 指令在本機執行應用程式。

如要啟動本機開發伺服器:

  1. 在包含 app.yaml 設定檔的目錄中,執行 dev_appserver.py 指令。

    dev_appserver.py

    指定應用程式目錄的路徑,例如:

    python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py PATH_TO_YOUR_APP
    

    或者,您也可以指定特定服務的設定檔,例如:

    python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py app.yaml
    

    如要變更通訊埠,請加入 --port 選項:

    python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --port=9999 PATH_TO_YOUR_APP
    

    DEVAPPSERVER_ROOT 替換為您擷取 devapp_server.py 封存版本的資料夾路徑。

    goapp serve

    goapp serve 指令包含在 Go 專用的原始 App Engine SDK 中,並包裝底層 dev_appserver.py Python 工具。如要啟動本機開發伺服器,請執行以下命令:

      goapp serve
    

    如要進一步瞭解 dev_appserver.py 指令選項,請參閱「本機開發伺服器選項」。

  2. 本機開發伺服器現已開始執行並監聽要求。您可以使用網路瀏覽器造訪 http://localhost:8080/,查看運作中的應用程式。

    如果您使用了 --port 選項指定自訂通訊埠,請務必在瀏覽器中開啟該通訊埠。

如要透過指令列停止本機伺服器,請按下以下按鍵:

  • macOS 或 Linux:Control + C
  • Windows:Control + Break 鍵

指定應用程式 ID

如想透過本機伺服器查看應用程式 ID,以便代表某個電子郵件地址進行操作或執行其他作業,請使用 appengine.AppID 函式。如要取得運作中應用程式的主機名稱,請使用 appengine.DefaultVersionHostname 函式。

偵測應用程式執行階段環境

如要判定程式碼是在實際工作環境還是本機開發伺服器中執行,您可以呼叫 IsDevAppServer() 方法。如果是 true,程式碼是在本機開發環境中執行;否則,是在實際工作環境中執行。


package devserver

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
)

func init() {
	http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "IsDevAppServer: %v", appengine.IsDevAppServer())
}

使用本機 Datastore

本機開發伺服器會使用在本機伺服器叫用之間持續存在的本機檔案來模擬 App Engine Datastore。

如要進一步瞭解索引和 index.yaml,請參閱「Datastore 索引」和「Datastore 索引設定」頁面。

瀏覽本機 Datastore

如果應用程式透過本機開發伺服器將資料寫入本機 Datastore,您可以在本機開發控制台瀏覽這些內容。

如要瀏覽本機 Datastore:

  1. 啟動開發伺服器

  2. 在本機開發控制台中存取 Datastore 檢視器 (網址為 http://localhost:8000/datastore)。

  3. 檢視本機 Datastore 內容。

指定 ID 分配政策

對於實際環境的 App Engine,您可以設定 Datastore 自動產生實體 ID

雖然實際運作伺服器的自動 ID 指派政策跟開發伺服器採用的政策截然不同,您還是可以為本機伺服器設定自動 ID 分派政策。

如要指定自動 ID 指派政策,請使用 --auto_id_policy 選項:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --auto_id_policy=sequential

取代:

  • DEVAPPSERVER_ROOT,其中包含您用來擷取 devapp_server.py 封存版本的資料夾路徑。

  • --auto_id_policy 與下列其中一個值:

    • scattered:(預設) 從大致平均分佈且不重複的整數序列指派 ID。
    • sequential:從連續的整數序列指派 ID。

清除本機 Datastore

如要清除應用程式的本機資料儲存庫,請叫用本機開發伺服器,如下所示:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --clear_datastore=yes app.yaml

DEVAPPSERVER_ROOT 替換為您擷取 devapp_server.py 封存版本的資料夾路徑。

變更本機 Datastore 的位置

如要變更資料儲存庫檔案使用的位置,請使用 --datastore_path 選項:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml

DEVAPPSERVER_ROOT 替換為您用來擷取 devapp_server.py 封存版本的資料夾路徑。

使用 Users 服務

App Engine 提供的 Users 服務可以簡化應用程式的驗證和授權作業。本機開發伺服器會使用本身的登入和登出頁面模擬 Google 帳戶的行為。在本機開發伺服器執行時,LoginURLLogoutURL 函式會回傳本機伺服器上的 /_ah/login/_ah/logout 網址。

使用郵件

本機開發伺服器可透過 SMTP 伺服器或安裝於本機的 Sendmail 來傳送呼叫 App Engine 郵件服務的電子郵件。

使用 SMTP

如要透過 SMTP 伺服器來啟用郵件支援功能,請叫用 dev_appserver.py,如下所示:

   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]

取代:

  • [DEVAPPSERVER_ROOT],其中包含您用來擷取 devapp_server.py 封存版本的資料夾路徑。
  • --smtp_host--smtp_port--smtp_user--smtp_password 選項,並使用您自己的設定值。

使用 Sendmail

如要透過 Sendmail 啟用郵件支援功能,請叫用 dev_appserver.py,如下所示:

   python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]

[DEVAPPSERVER_ROOT] 替換為您擷取 devapp_server.py 封存版本的資料夾路徑。

本機伺服器將透過 sendmail 指令以安裝的預設設定來傳送電子郵件訊息。

使用網址擷取

應用程式使用 URL Fetch API 發出 HTTP 要求時,本機開發伺服器會直接從您的電腦發出要求。如果您是使用 Proxy 伺服器來存取網站,本機伺服器中的 URL Fetch 行為可能會與實際工作環境 App Engine 不同。