遷移至 Cloud Datastore 模擬器

Cloud Datastore 模擬器可讓您在本機環境中模擬 Datastore 實際工作環境。Cloud Datastore 模擬器會逐步發佈為 dev_appserver 的預設 Datastore 實作。

遷移至 Datastore 模擬器的優點

App Engine 標準環境用戶端程式庫 (例如 DB 和 NDB) 和 Cloud Datastore 用戶端程式庫可以共用 Datastore 模擬器。

您可以使用 Datastore 模擬器在 App Engine 標準環境與 App Engine 彈性環境上執行的服務之間共用本機資料。

事前準備

  1. 下載並安裝 Java 執行階段 (JRE) 11 以上版本。

  2. google-cloud-sdk/bin 目錄執行 dev_appserver。

選擇模擬環境

Cloud Datastore 模擬器是部分 dev_appserver 使用者的預設模擬器。如果您正在使用 Cloud Datastore 模擬器,dev_appserver 將會顯示:

... Using Cloud Datastore Emulator.

您可以強制 dev_appserver 使用 Cloud Datastore 模擬器,方法是在啟動 dev_appserver.py 時將 --support_datastore_emulator 標記設為 true:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --support_datastore_emulator=[true|false] app.yaml

DEVAPPSERVER_ROOT 替換為您用來擷取已封存版本 devapp_server.py 的資料夾路徑。如要進一步瞭解如何下載及使用已封存的 dev_appserver.py 版本,請參閱「使用本機開發伺服器」一文。

將 dev_appserver 與 Datastore 模擬器搭配使用

Dev_appserver 可以依據環境變數 DATASTORE_EMULATOR_HOST 判斷是否啟動模擬器。

  • 如果這項環境變數存在,dev_appserver 會與在 DATASTORE_EMULATOR_HOST 中運作的現有模擬器程序進行通訊。

  • 如果這項環境變數不存在,dev_appserver 則會啟動新的模擬器程序。您可以在啟動 dev_appserver.py 時設定 --datastore_emulator_port,藉此指定 Datastore 模擬器的通訊埠。

行為變更

本機資料格式轉換

就目前來說,本機 Datastore 模擬器會將資料儲存在 sqlite3,而 Cloud Datastore 模擬器則是將資料儲存為 Java 物件。

當使用舊版 sqlite3 資料啟動 dev_appserver 時,資料將轉換為 Java 物件。系統會以 {original-data-filename}.sqlitestub 的檔案名稱為原始資料備份。

本機資料檔案位置

您可以使用 --datastore_path 標記指定本機資料檔案。

  • dev_appserver 啟動模擬器時,位置會維持不變。

  • dev_appserver 使用現有的 Cloud Datastore 模擬器時,系統會忽略這個標記,並優先採用模擬器的設定。

本機 index.yaml

  • 空白的 index.yaml 視同無效檔案。index.yaml 檔案採用 YAML 格式的語法,並含有名為「indexes」的單一清單元素。

  • dev_appsever 啟動模擬器時,index.yaml 會保留在應用程式的專案目錄中。

  • dev_appserver 使用現有的 Cloud Datastore 模擬器時,模擬器會負責管理 index.yaml。

本機資料儲存庫伺服器的其他功能維持不變。

疑難排解

取得模擬器輸出

根據預設,dev_appserver 會以無訊息模式執行 Datastore 模擬器。如要查看 Datastore 模擬器的輸出內容,請以 --dev_appserver_log_level=debug 執行 dev_appserver。

gRPC 匯入失敗

dev_appserver 使用 gRPC 與 Cloud Datastore 模擬器進行通訊。gcloud CLI 會封裝 gRPC,但封裝版本可能與某些作業系統不相容,因而導致匯入作業失敗。

如要修正匯入作業失敗的問題,您可以使用 pip 和 gcloud CLI 219.0.0 以上版本另行安裝 gRPC:

pip install grpcio