我遇到了类似于这个问题。我有一个GAE应用和一个GCE应用,它们在云中运行良好,但我在本地环境中无法让它们都访问同一数据存储区。
我已按上述链接中的说明设置了本地数据存储区,但我的代码看起来像这样(为了使其在云中工作,我必须这样构建):
当我在本地运行GCE应用程序并尝试连接正在运行的GAE数据存储时,我会得到以下输出(我已将实际数据集ID替换为“myDatasetId”):
连接到数据存储 - “myDatasetId” 连接主机:http://localhost:8888 连接数据集:“myDatasetId” com.google.api.services.datastore.client.DatastoreFactory makeClient 警告:未使用任何凭据 运行查询时出现问题:错误: runQuery 错误404 Error 404 com.google.api.services.datastore.client.DatastoreException:错误404 Error 404 at com.google.api.services.datastore.client.RemoteRpc.makeException(RemoteRpc.java:114) at com.google.api.services.datastore.client.RemoteRpc.call(RemoteRpc.java:80) at com.google.api.services.datastore.client.Datastore.runQuery(Datastore.java:109)
我的GAE控制台会打印出这个(我可以正常访问8888端口中的管理控制台):
com.google.appengine.tools.development.AbstractModule startup INFO:管理员控制台正在http://localhost:8888/_ah/admin运行 com.google.appengine.tools.development.LocalResourceFileServlet doGet 警告:未找到文件:
/datastore/v1beta2/datasets/"myDatasetId"/runQuery
我已验证了GCE应用程序和GAE应用程序中的数据集ID匹配。我已成功地在各自的本地运行每个应用程序,并且它们都能够正确地连接到本地数据存储(这是在使用gcd.cmd工具为GCE应用程序时)。根据上面链接中的答案,似乎这是可能的,我做错了什么吗?
更新
不确定是否相关,但在启动GCD工具时我收到以下错误:
严重错误:无法加载App Engine开发代理。安全限制将不完全模拟。java.lang.RuntimeException:转换过程中出现意外异常。 在com.google.apphosting.utils.clearcast.ClearCast $ CasterImpl.cast(ClearCast.java:385)处,抛出异常 在com.google.apphosting.utils.clearcast.ClearCast.staticCast(ClearCast.java:252)处 在com.google.apphosting.utils.clearcast.ClearCast.staticCast(ClearCast.java:263)处 在com.google.appengine.tools.development.agent.AppEngineDevAgent.premain(AppEngineDevAgent.java:61)处 在sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)处 在sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)处 在sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)处 在java.lang.reflect.Method.invoke(Unknown Source)处 在sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)处 在sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)处
原因是:java.lang.IllegalAccessException:类com.google.apphosting.utils.clearcast.ClearCast $ CasterImpl无法访问具有修饰符“public”的类com.google.appengine.tools.development.agent.$Proxy0的成员。
如果它已经初始化,我是否可以以某种方式将我的GAE应用连接到GCD工具数据存储库?感到困惑。
我已按上述链接中的说明设置了本地数据存储区,但我的代码看起来像这样(为了使其在云中工作,我必须这样构建):
print("Connecting to datastore - " + datasetId);
// Get credentials form GCE if not local.
Credential computeEngineCredential = DatastoreHelper.getComputeEngineCredential();
if(computeEngineCredential != null)
{
print("Compute Engine Credetianls are not null! Access token: " + computeEngineCredential.getAccessToken());
}
DatastoreOptions options = DatastoreHelper.getOptionsfromEnv().credential(DatastoreHelper.getComputeEngineCredential()).dataset(datasetId).build();
print("Connection Host: " + options.getHost());
print("Connection Dataset: " + options.getDataset());
datastore = DatastoreFactory.get().create(options);
当我在本地运行GCE应用程序并尝试连接正在运行的GAE数据存储时,我会得到以下输出(我已将实际数据集ID替换为“myDatasetId”):
连接到数据存储 - “myDatasetId” 连接主机:http://localhost:8888 连接数据集:“myDatasetId” com.google.api.services.datastore.client.DatastoreFactory makeClient 警告:未使用任何凭据 运行查询时出现问题:错误: runQuery 错误404 Error 404 com.google.api.services.datastore.client.DatastoreException:错误404 Error 404 at com.google.api.services.datastore.client.RemoteRpc.makeException(RemoteRpc.java:114) at com.google.api.services.datastore.client.RemoteRpc.call(RemoteRpc.java:80) at com.google.api.services.datastore.client.Datastore.runQuery(Datastore.java:109)
我的GAE控制台会打印出这个(我可以正常访问8888端口中的管理控制台):
com.google.appengine.tools.development.AbstractModule startup INFO:管理员控制台正在http://localhost:8888/_ah/admin运行 com.google.appengine.tools.development.LocalResourceFileServlet doGet 警告:未找到文件:
/datastore/v1beta2/datasets/"myDatasetId"/runQuery
我已验证了GCE应用程序和GAE应用程序中的数据集ID匹配。我已成功地在各自的本地运行每个应用程序,并且它们都能够正确地连接到本地数据存储(这是在使用gcd.cmd工具为GCE应用程序时)。根据上面链接中的答案,似乎这是可能的,我做错了什么吗?
更新
不确定是否相关,但在启动GCD工具时我收到以下错误:
严重错误:无法加载App Engine开发代理。安全限制将不完全模拟。java.lang.RuntimeException:转换过程中出现意外异常。 在com.google.apphosting.utils.clearcast.ClearCast $ CasterImpl.cast(ClearCast.java:385)处,抛出异常 在com.google.apphosting.utils.clearcast.ClearCast.staticCast(ClearCast.java:252)处 在com.google.apphosting.utils.clearcast.ClearCast.staticCast(ClearCast.java:263)处 在com.google.appengine.tools.development.agent.AppEngineDevAgent.premain(AppEngineDevAgent.java:61)处 在sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)处 在sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)处 在sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)处 在java.lang.reflect.Method.invoke(Unknown Source)处 在sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)处 在sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)处
原因是:java.lang.IllegalAccessException:类com.google.apphosting.utils.clearcast.ClearCast $ CasterImpl无法访问具有修饰符“public”的类com.google.appengine.tools.development.agent.$Proxy0的成员。
如果它已经初始化,我是否可以以某种方式将我的GAE应用连接到GCD工具数据存储库?感到困惑。