我们正在使用 App Engine、Datastore 和 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 INFO:本地数据存储已初始化:类型:高复制存储:\WEB-INF\appengine-generated\local_db.bin com.google.appengine.api.datastore.dev。 LocalDatastoreService 加载信息:无法从后备存储加载,\WEB-INF\appengine-generated\local_db.bin java.lang.ClassNotFoundException:com.google.cloud.datastore.emulator.impl.LocalDatastoreFileStub$FileProfile at java.net。 URLClassLoader.findClass(URLClassLoader.java:382) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424)
如果我们然后保存一条新记录,它会清除 local_db.bin 并创建一个新记录。
任何人都知道这个问题可能在哪里?
更新:
我已经按照@Chris Halcrow 在他的回答中描述的确切过程重新导入数据。数据现在已成功直接导入 App Engine 应该看到的 local_db.bin,但我仍然看到错误。
我们怀疑可能存在权限问题。我们已尝试更改运行 AppEngine 的帐户的一些 IAM 权限。具体来说,我们已尝试将 Project Editor IAM 角色添加到我们用于我们的帐户的帐户中gcloud login
,如激活 App Engine 的 DataStore 权限中所述。
我们还查看了以下内容,其中详细说明了使用 GitHub 问题中详述的导出/导入 Powershell 脚本时所需的权限。
https://cloud.google.com/datastore/docs/export-import-entities#permissions
我们相信我们当前的角色应该允许本文描述的所需权限。