您可以使用本機開發伺服器模擬在實際工作環境中執行 App Engine 應用程式,也可以使用本機開發伺服器存取 App Engine 隨附服務。
模擬環境會強制執行幾項沙箱限制 (例如設有使用限制的系統功能和 PHP 5 模組匯入服務),但不包含要求逾時或配額等其他限制。
App Engine 適用的 SDK 所含程式庫提供多項服務 (包括 Datastore、Memcache 和工作佇列),而本機開發伺服器也會在本機中執行這些服務的工作,以便進行模擬。在開發伺服器中執行應用程式時,仍可使用 Google API HTTP 端點對正式基礎架構進行遠端 API 呼叫。
事前準備
由於 PHP 5 已停止支援,您無法再使用最新版 dev_appserver.py 在本機執行應用程式。如要下載封存版本的 devapp_server.py,請按照下列步驟操作:
從封存中,下載包含
dev_appserver.py伺服器的壓縮資料夾,適用於支援期限已屆滿的執行階段。將目錄內容解壓縮到本機檔案系統,例如
/home目錄。您可以在google_appengine/目錄中找到dev_appserver.py。
設定本機開發伺服器
如要執行本機開發伺服器工具,請設定下列項目:
確認您已安裝 Python 2 解譯器,且版本為 2.7.12 以上。
在殼層中,將
DEVAPPSERVER_ROOT環境變數設為 Python 2 解譯器的路徑。
執行本機開發伺服器
設定本機開發伺服器並為應用程式建立 app.yaml 設定檔後,您可以使用 dev_appserver.py 指令在本機執行應用程式。
如要啟動本機開發伺服器:
在包含
app.yaml設定檔的目錄中,執行dev_appserver.py指令。Windows / macOS
指定應用程式目錄的路徑,例如:
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封存版本的資料夾路徑。Linux/cust. php-cgi
如果您使用 Linux,或想使用自訂版本的
php-cgi,請指定php-cgi的目錄路徑:在本機電腦上建構您自己的 App Engine PHP 擴充功能版本。
使用
--php_executable_path和--php_gae_extension_path選項啟動本機開發伺服器:python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --php_executable_path=[PATH_TO_PHP_CGI] --php_gae_extension_path=[PATH_TO_APPENGINE_EXTENSION] app.yaml取代:
- DEVAPPSERVER_ROOT,其中包含您解壓縮
devapp_server.py封存版本的資料夾路徑。 --php_executable_path,其中包含 PHP 解譯器的位置。--php_gae_extension_path,並填入您在上一個步驟中建構的gae_runtime_module.so檔案位置。
- DEVAPPSERVER_ROOT,其中包含您解壓縮
如要進一步瞭解
dev_appserver.py指令選項,請參閱本機開發伺服器選項。本機開發伺服器現已開始執行並監聽要求。您可以在網路瀏覽器中造訪 http://localhost:8080/,查看運作中的應用程式。
如果您使用了
--port選項指定自訂通訊埠,請務必在瀏覽器中開啟該通訊埠。
如要透過指令列停止本機伺服器,請按下下列按鍵:
- macOS 或 Linux:Control+C
- Windows:Control+Break
指定應用程式 ID
如想透過本機伺服器查看應用程式 ID,以便代表某個電子郵件地址進行操作或執行其他作業,請使用 AppIdentityService::getApplicationId 函式。如要取得運作中應用程式的主機名稱,請使用 AppIdentityService::getDefaultVersionHostname 函式。
偵測應用程式執行階段環境
如要判定程式碼是在實際工作環境還是本機開發伺服器中執行,請檢查 SERVER_SOFTWARE 環境變數的值:
if (strpos(getenv('SERVER_SOFTWARE'), 'Development') === 0){
echo 'Local development server';
} else {
echo 'Production';
}
儲存資料
PHP 版 App Engine 支援透過 PHP 的 Streams API 讀取及寫入 Cloud Storage。使用支援 PHP Streams 實作的任何 PHP 函式 (例如 fopen、fwrite 或 file_get_contents) 時,指定 Cloud Storage URI (gs://) 即可讀取及寫入 Cloud Storage。
本機開發伺服器可透過讀取和寫入要求之間保留的臨時本機檔案,來模擬這項功能。
瀏覽本機 Datastore
如果應用程式透過本機開發伺服器將資料寫入本機 Datastore,您可以在本機開發控制台瀏覽這些內容。
如要瀏覽本機 Datastore:
在本機開發控制台中存取 Datastore 檢視器 (網址為
http://localhost:8000/datastore)。檢視本機 Datastore 內容。
使用 Users 服務
App Engine 提供的 Users 服務可以簡化應用程式的驗證和授權作業。本機開發伺服器會使用本身的登入和登出頁面模擬 Google 帳戶的行為。在本機開發伺服器執行時,createLoginURL 和 createLogoutURL 函式會回傳本機伺服器上的 /_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 不同。
使用 XDebug 在本機除錯
如果您的偵錯工具與 XDebug 偵錯工具相容,並已安裝 xdebug 模組,您就能在本機開發伺服器中使用 XDebug。
如何在 Linux 或 macOS 上為開發伺服器啟用 XDebug:
匯出
XDEBUG_CONFIG環境變數,並使用 IDE 的 idekey 進行連結export XDEBUG_CONFIG="idekey=netbeans-xdebug remote_host=localhost"使用
--php_remote_debugging=yes叫用開發伺服器