Cloud Datastore 模擬器可讓您在本機環境中模擬 Datastore 實際工作環境。Cloud Datastore 模擬器會逐步發佈為 dev_appserver 的預設 Datastore 實作。
遷移至 Datastore 模擬器的優點
App Engine 標準環境用戶端程式庫 (例如 DB 和 NDB) 和 Cloud Datastore 用戶端程式庫可以共用 Datastore 模擬器。
您可以使用 Datastore 模擬器在 App Engine 標準環境與 App Engine 彈性環境上執行的服務之間共用本機資料。
事前準備
下載並安裝 Java 執行階段 (JRE) 11 以上版本。
從
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