本機開發伺服器 (dev_appserver.py) 屬於 gcloud CLI 的 App Engine 元件。本主題提供 dev_appserver.py 使用情況的進階資訊。
建議您使用標準的 Python 工具,例如利用 virtualenv 來建立獨立的環境,並透過 pytest 進行單元測試和整合測試,而不要使用 dev_appserver 提供的本機開發伺服器 Google Cloud SDK。
如要進一步瞭解本機測試,請參閱「使用本機開發伺服器」。
設定本機開發伺服器工具
範例 dev_appserver.py 指令可能如下所示:
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py OPTION yaml_path FILES
更改下列內容:
- CLOUD_SDK_ROOT,並提供您安裝 Google Cloud CLI 的根目錄路徑。預設目錄為
./google-cloud-sdk/。 - OPTION,並使用當地開發伺服器支援的旗標。
- FILES 為位置引數
yaml_path指定一或多個app.yaml檔案 (每個服務一個檔案)。
如需完整的選項清單,請執行下列指令:
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py -h
常用選項
最常見的選項如下:
--admin_host=ADMIN_HOST- 本機開發伺服器的管理控制台應繫結的主機名稱 (預設:localhost)。
--admin_port=ADMIN_PORT- 本機開發伺服器的管理控制台應繫結的通訊埠 (預設:8000)。
--addn_host=ADDN_HOST- :這個引數可讓您將其他 HTTP 主機標頭值加入允許清單,以便在不需停用主機檢查的情況下,透過 Proxy 存取伺服器 (請參閱
--enable_host_checking)。以*.開頭的其他主機允許所有子網域。舉例來說,*.example.org允許host.example.org,但不允許sub.host.example.org或example.org。主機名稱開頭為**.,允許任何深度的子網域。舉例來說,**.example.com允許host.example.com和sub.host.example.com,但不允許example.com。(預設值:[]) --allow_skipped_files=...- 使應用程式可以讀取在
app.yamlskip_files或static中指定的檔案 (預設值為 False)。 -A APP_ID, --application=...- 設定應用程式,覆寫
app.yaml檔案中的應用程式值 (預設值:無)。 --appidentity_email_address=...- 與可下載金鑰的服務帳戶相關聯的電子郵件地址。
如果沒有本機應用程式 ID,則可能是
None(預設值:None)。 --appidentity_private_key_path=...- 與服務帳戶相關聯的私密金鑰檔案路徑 (
.pem格式)。如果已設定appidentity_email_address,則必須設定此值 (預設值:無)。 --api_host=API_HOST- API 伺服器應繫結的主機名稱 (預設:localhost)。
--api_port=API_PORT- API 呼叫之伺服器應繫結的通訊埠 (預設:0)。
--auth_domain=...- 要使用的授權網域名稱 (預設值:
gmail.com)。 --auto_id_policy=...- 已淘汰。本機資料儲存庫如何指派自動 ID。選項為
sequential或scattered(預設值:scattered)。 --automatic_restart=...- 當檔案服務相關的檔案發生變更時,自動重新啟動執行個體 (預設值:True)。
--blobstore_path=...- 用於儲存 Blob 內容的目錄路徑 (如未設定,預設為
--storage_path的子目錄) (預設值:無)。 --clear_datastore=yes|no- 啟動網路伺服器之前,請先清除資料儲存庫資料和歷史記錄檔 (預設值:
no)。 --clear_search_indexes...- 清除搜尋索引 (預設值:False)。
--custom_entrypoint=...指定自訂執行階段模組的進入點。存在這類模組時,此為必填參數。在字串中納入
{port}(不含引號),將通訊埠編號當成引數傳入 (預設值:)。例如:--custom_entrypoint="gunicorn -b localhost:{port} mymodule:application"--datastore_consistency_policy {consistent,random,time}決定 Datastore 寫入作業是否應顯示在全域查詢時套用的政策 (預設為時間)。
--datastore_emulator_cmd=...這個路徑通往可叫用 Cloud Datastore 模擬器的指令碼,如果留空,
dev_appserver會嘗試在 Google Cloud SDK 中尋找 Datastore 模擬器 (預設值:無)。--datastore_emulator_port=...dev_appserver 應啟動 Cloud Datastore 模擬器的通訊埠號碼 (預設值:0)。
--datastore_path=...本機資料儲存庫資料檔使用的路徑。如果檔案不存在,則伺服器會建立這個檔案。
--default_gcs_bucket_name=...預設 Cloud Storage 值區名稱 (預設值:無)。
--dev_appserver_log_level {debug,info,warning,critical,error}記錄開發伺服器所產生記錄訊息的記錄層級將不會顯示在主控台上 (此標記對診斷
dev_appserver.py中的問題,比對診斷應用程式程式碼中的問題更為實用) (預設值:info)。--enable_host_checking=yes|no決定是否強制執行應用程式模組、API 伺服器和管理伺服器的
HTTP主機檢查。 主機檢查可防範 DNS 重新繫結攻擊,請先瞭解安全影響再停用 (預設值:True)。--enable_console=yes|no在管理員檢視畫面中啟用互動式控制台 (預設值:False)。
--enable_sendmail=yes|no使用本機電腦安裝的
Sendmail傳送電子郵件訊息。--enable_task_running=yes|no啟用開發伺服器以執行發送工作 (預設值:
yes)。 如果您指定no,伺服器將無法執行發送工作。--env_var=...本機執行階段處理程序的使用者定義環境變數。每個
env_var均採用key=value的格式,您可以定義多個環境變數。除了app.yaml中的env_variables外,您也可以使用這個標記設定本機處理程序的其他環境變數。例如:
--env_var KEY_1=val1 --env_var KEY_2=val2--grpc_api_port...gRPCAPI 伺服器監聽的通訊埠 (預設值:0)。--help顯示實用訊息後退出。
--host=...伺服器使用的主機位址。需設定此位址才能使用網路上的其他電腦存取開發伺服器。若將位址設為
0.0.0.0,就能同時進行 localhost 存取和 IP 或主機的名稱存取 (預設值:localhost)。--log_level=...將記錄訊息寫入主控台的最低記錄層級;將輸出指定登入層級或更高層級的訊息。 可能的值為
debug、info、warning、error和critical。--logs_path=...根據預設,本機開發伺服器的記錄只會儲存在記憶體中。執行本機開發伺服器時,指定此選項可將記錄另存成檔案,即使伺服器重新啟動後,仍然可以使用該記錄。您必須指定 SQLite 資料庫檔案的目錄路徑和名稱。建立 SQLite 資料庫檔案時,若資料庫檔案尚不存在,會以指定的名稱建立該檔案。
例如:
--logs_path=/home/logs/boglogs.db--max_module_instances=...可以針對特定模組啟動的執行階段執行個體數量上限。此值可以是整數,在此情況下,所有模組都受限於該執行個體數量或
module:max_instances的逗號分隔清單 (預設值:無)。例如:default:5,backend:3--mysql_host=MYSQL_HOST用於模擬 Cloud SQL 儲存空間的執行中 MySQL 伺服器主機名稱 (預設值:localhost)。
--mysql_port=MYSQL_PORT用於模擬 Cloud SQL 儲存空間的執行中 MySQL 伺服器連接埠號碼 (預設值:3306)。
--mysql_user=MYSQL_USER連線至
--mysql_host和--mysql_port或--mysql_socket中指定的 MySQL 伺服器時要使用的使用者名稱 (預設值:)。--mysql_password=MYSQL_PASSWORD連線至
--mysql_host和--mysql_port或--mysql_socket中指定的 MySQL 伺服器時要使用的密碼 (預設值:)。--mysql_socket=MYSQL_SOCKET連線至用於模擬 Cloud SQL 儲存空間的執行中 MySQL 伺服器時,要使用的 Unix 通訊端檔案路徑 (預設值:None)。
--port=...伺服器使用的連接埠號碼,預設為
8080步。若啟動多個伺服器 (例如用於服務),會將後續連接埠指派給這些伺服器,例如8081、8082。--require_indexes=yes|no會停用在
index.yaml檔案中自動產生項目的功能。當應用程式發出要求在檔案中定義其索引的查詢,但卻找不到索引定義時,會引發例外狀況。這種情況與在 App Engine 上執行時可能會發生的情況相似 (預設值:no)。--runtime=...指定您要使用的預設執行階段。如需支援的執行階段清單,請參閱「執行階段支援時間表」。
--running_datastore_emulator_host=...覆寫環境變數 DATASTORE_EMULATOR_HOST,也就是
hostname:port可連線的執行中 Cloud Datastore 模擬器dev_appserver(預設值:無)。--search_indexes_path=...用於儲存搜尋索引的檔案路徑 (如未設定,預設為
--storage_path中的檔案) (預設值:None)。--skip_sdk_update_check=...略過檢查 SDK 更新 (如果為 false,請使用
.appcfg_nag決定) (預設值:False)。--show_mail_body=...記錄使用 Mail API 傳送的電子郵件內容 (預設值:False)。
--smtp_allow_tls...SMTP 伺服器宣告支援 TLS 時,允許使用 TLS (如果未設定 --smtp_host,則會忽略這項設定) (預設值:True)。
--smtp_host=...傳送電子郵件訊息時所用的 SMTP 伺服器主機名稱。
--smtp_port=...傳送電子郵件訊息時所用的 SMTP 伺服器連接埠號碼。
--smtp_user=...傳送電子郵件訊息時所用的 SMTP 伺服器使用者名稱。
--smtp_password=...傳送電子郵件訊息時所用的 SMTP 伺服器密碼。
--storage_path=...除非以
--datastore_path、--blobstore_path或--logs_path覆寫,否則會儲存所有本機檔案 (例如 Datastore、Blobstore、Cloud Storage 檔案和記錄) 的路徑。--support_datastore_emulator=yes|no使用 Cloud Datastore 模擬器 (測試版) 模擬本機資料儲存庫。
--ssl_certificate_path=...SSL 憑證的路徑。使用這個選項時,也必須提供
--ssl_certificate_key_path(預設值:無)。--ssl_certificate_key_path=...對應 SSL 私密金鑰的路徑。使用這個選項時,也必須提供
--ssl_certificate_path(預設值:無)。--threadsafe_override=...覆寫應用程式的執行緒安全設定。此值可以是布林值,在此情況下,所有模組的執行緒安全設定都將遭到覆寫,或為
module:threadsafe_override的逗號分隔清單 (預設值:無)。例如:
default:False,backend:True--use_mtime_file_watcher=...使用 mtime 輪詢作業來偵測原始碼變更。如果使用分散式檔案系統從遠端電腦修改程式碼,則會很實用 (預設值:False)。
--watcher_ignore_re=...用來指定檔案監控器要忽略的檔案。(預設值:無)
Python 執行階段專屬的指令選項:
--python_startup_script- 啟動新 Python 執行階段執行個體時執行的指令碼 (對於偵錯工具這類的工具而言相當實用) (預設值:None)。
--python_startup_args- 在
python_startup_script中指定的指令碼可以使用的引數 (預設值:無)。 --python27_executable_path=...- python27 執行階段例項的 python27 可執行檔路徑 (預設值:None)。
--python_virtualenv_path- 這個目錄的路徑用於設定 Python 3 虛擬環境,以供 Python 3 應用程式的本機 devappserver 執行環境使用。如果路徑不存在,系統會建立目錄,但不會在 devappserver 執行完畢時清除,因此可在呼叫之間進行快取。如未定義,系統會使用臨時目錄,並在執行結束時清理。
--runtime_python_path=...- Python 二進位檔的路徑。如要在
dev_appserver上執行 Python 應用程式,請指定這個標記。