使用本機開發伺服器

Cloud SDKPython 2 專用的 App Engine SDK 均含有本機開發伺服器 (dev_appserver.py),您可在本機上執行此伺服器,以模擬應用程式在 App Engine 實際工作環境中的運作情況。模擬的環境會強制執行一些沙箱限制,例如有限的系統功能和 Python 2 模組匯入,但不包括要求逾時或配額等限制。

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

執行本機開發伺服器

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

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

  1. 從含有應用程式 app.yaml 設定檔的目錄執行 dev_appserver.py 指令,如下所示:

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

    dev_appserver.py [PATH_TO_YOUR_APP]

    或者,指定特定服務的設定檔,例如:

    dev_appserver.py app.yaml

    如要變更通訊埠,請包含 --port 選項:

    dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]

    dev_appserver.py 無法運作?

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

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

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

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

  • macOS 或 Linux:Control-C
  • Windows:Control-Break

指定應用程式 ID

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

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

如要判定程式碼是在實際工作環境還是本機開發伺服器中執行,請檢查 SERVER_SOFTWARE 環境變數:

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
  # Production
else:
  # Local development server

使用本機 Datastore

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

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

瀏覽本機 Datastore

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

如要瀏覽本機 Datastore:

  1. 啟動開發伺服器

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

  3. 檢視本機 Datastore 內容。

指定 ID 分配政策

針對實際工作環境中的 App Engine,您可以將資料儲存庫設定為自動產生實體 ID

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

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

dev_appserver.py --auto_id_policy=sequential

其中,--auto_id_policy 可能為:

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

清除本機 Datastore

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

dev_appserver.py --clear_datastore=yes app.yaml

變更本機 Datastore 的位置

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

dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml

使用 Users 服務

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

使用郵件

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

使用 SMTP

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

dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]

其中,--smtp_host--smtp_port--smtp_user--smtp_password 選項必須設定為您所要的值。

使用 Sendmail

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

dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]

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

使用網址擷取

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

使用互動式控制台

互動式控制台可讓開發人員將任意的 Python 程式碼輸入網路表單,並在應用程式環境內加以執行。這個控制台提供的應用程式環境和服務存取權與應用程式內含的 .py 檔案相同。

如要使用互動式控制台:

  1. 啟動開發伺服器

  2. 在本機開發控制台中存取互動式控制台。(網址為 http://localhost:8000/console。)

  3. 在文字區域輸入您要執行的任何 Python 程式碼,然後提交表單以執行該程式碼。舉例來說,以下程式碼將新增名為 Greeting 的 Datastore 實體,其中包含文字內容 Hello

      from google.appengine.ext import ndb
      class Greeting(ndb.Model):
        content = ndb.TextProperty()
    
      e = Greeting(content="Hello")
      e.put()
    

使用 PDB 進行偵錯

如何使用 Python PDB 偵錯工具

  1. 在程式碼中新增下面這行指令:

    import pdb; pdb.set_trace();
    

    此時,dev_appserver 會中斷並進入 PDB REPL,方便您透過指令列對程式碼進行偵錯。

  2. 如果應用程式同時發出叫用 pdb.set_trace() 的多個要求,系統會啟動多個並行的偵錯工作階段,各個工作階段會將輸出內容傳送至 STDOUT。為了避免這種情況,請停用 dev_appserver 多執行緒與多重處理支援,藉此將要求序列化。操作方式如下所示:

    1. 停用以下項目的多執行緒:

      • 使用 --threadsafe_override=false 標記的所有服務。
      • 使用 --threadsafe_override=<SERVICENAME>:false 標記的單一服務。
      • 使用 --threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false 標記停用多項服務的多執行緒。
      1. 停用多重處理:
        • 使用 --max_module_instances=1 標記停用所有服務的多重處理。
        • 使用 --max_module_instances=<SERVICENAME>:1 標記停用單一服務的多重處理。
        • 使用 --max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1 標記的多項服務。
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Python 2 適用的 App Engine 標準環境