App Engine- LocalDatastorService负载 - 无法从备用商店加载



我们正在使用应用引擎,数据存储和Java,我们一直在尝试将我们的生产Google DataStore复制到本地副本。

(我使用的完整迁移脚本已在单独的 github问题中详细介绍)

我们使用以下来导出

gcloud datastore export --namespaces="(default)" gs://$GOOGLE_CLOUD_BUCKET

然后导入看起来像这样的东西

'http://' + $LOCAL_DATASTORE_HOSTNAME + ':' + $LOCAL_DATASTORE_PORT + '/v1/projects/' + $PROJECT_ID + ':import'

运行脚本创建一个" local_db.bin",但似乎是正确的,但是我们将其复制到所需的位置并运行它,我们点击了以下错误。

com.google.appengine.api.datastore.dev.localdatastoreservice init 信息:本地数据存储初始化: 类型:高复制 存储: web-inf appengine-enerated local_db.bin com.google.appengine.api.datastore.dev.localdatastoreservice负载 信息:无法从备用商店加载, web-inf appengine-enerated local_db.bin java.lang.classnotfoundexception:com.google.cloud.datastore.emulator.impl.localdatastorefilestub $ fileProfile 在java.net.urlclassloader.findclass(urlclassloader.java:382) at Java.lang.classloader.loadclass(classLoader.java:424)

如果我们保存新记录,它将吹走local_db.bin并创建一个新记录。

有人知道这个问题可能在哪里?

更新:

我遵循了@chris Halcrow在他的答案中描述的确切过程,以重新介绍数据。现在,数据已成功导入到该应用引擎应该看到的Local_db.bin中,但是我仍然看到错误。

我们怀疑可能存在许可问题。我们尝试更改Appengine正在运行的帐户的一些IAM许可。具体来说,我们已经尝试将项目编辑器IAM角色添加到我们用于gcloud login的帐户中,如激活App Engine的DataStore权限所记录的。

我们还审查了以下内容,当我们使用GitHub问题中详细详细介绍的导出/导入PowerShell脚本时,哪些详细信息需要权限。

https://cloud.google.com/datastore/docs/export-import-entities#permissions

我们相信我们目前的角色应该允许所描述的所需权限。

不要复制local_db.bin文件,因为这可能会导致不正确的内存参考/指示器。改用以下过程:

  1. 停止您的本地附录(终止在控制台或Close Eclipse/Intellij或其他运行它)
  2. 停止运行数据存储模拟器的任何内容(例如,如果您通过命令提示符运行该过程,则终止该过程)。
  3. 确定正在运行的Appengine实例在哪里寻找local_db.bin文件(对于您在附录的本地实例下运行的Java应用程序,默认位置与包含WAR文件的目录有关,例如C:my_app_engine_apptargetmy-app-name-1.0-SNAPSHOTWEB-INFappengine-generatedlocal_db.bin
  4. 删除appengine-generated文件夹的内容
  5. 打开常规的Windows命令提示符(作为管理员运行)
  6. cd到包含您的Appengine App的目录
  7. 使用以下命令运行模拟器(确保data-dir指定您在步骤3中确定的目录)-gcloud beta emulators datastore start --data-dir=C:my_app_engine_apptargetmy-app-name-1.0-SNAPSHOT(请参阅https://cloud.google.com/datastore/datastore/docs/tools/tools/datastore-emulator-emulator-ymulator#starting_the_emulator)
  8. 记下数据存储模拟器在
  9. 上启动的端口
  10. 确保您的数据存储脚本使用此端口作为$LOCAL_DATASTORE_PORT的值
  11. 在您的本地数据存储模拟器仍在运行的情况下,再次运行导入脚本(对于PowerShell脚本,请确保在运行PowerShell作为管理员时运行脚本)
  12. 如果成功,您应该在控制台中看到可能看起来像以下几个或全部的消息:信息:将处理程序添加到新注册的频道信息:检测到的HTTP/2连接信息:检测到的非HTTP/2连接是时候坚持数据存储:125 ms
  13. 现在检查您的local_db.bin文件,例如C:my_app_engine_apptargetmy-app-name-1.0-SNAPSHOTWEB-INFappengine-generatedlocal_db.bin-您应该看到它已经夸大了它现在包含您的数据。

最新更新