我使用(2.0.1)作为我最后一年项目的一部分,到目前为止在这方面还是比较成功的。在部署到我的appspot.com域时,我没有任何问题,但是在本地部署时,我遇到了一些问题。
(以下代码块中对的任何引用都是我的实际google云项目id的别名)
我有一个带注释的@API类的有效openapi描述符(openapi.json),我使用"gcloud服务管理部署openapi.json“将其部署到云端点。该命令成功返回:
Service Configuration [2017-02-23r0] uploaded for service [api.endpoints.<my-project-id>.cloud.goog]
然后将返回的config_id映射到endpoints_api_service中的正确的app.yaml
endpoints_api_service:
name: api.endpoints.<my-project-id>.cloud.goog
config_id: 2017-02-23r0
此服务由使用"gcloud服务-管理列表“的gcloud cli工具列出。
NAME TITLE
storage-component.googleapis.com Google Cloud Storage
api.endpoints.<my-project-id>.cloud.goog api.endpoints.<my-project-id>.cloud.goog
etc...
和"gcloud服务-管理层信任列表--服务api.endpoints.my-project-id.cloud.goog“
CONFIG_ID SERVICE_NAME
2017-02-23r0 api.endpoints.<my-project-id>.cloud.goog
... other version configs
并且可以在我的appspot.com域中访问(我可以调用端点并接收正确的响应)
我试图使用java的maven appengine插件(mvn appengine:devserver)在本地主机上部署我的项目,但是在jetty启动时,我遇到了以下异常:
WARNING: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext...
com.google.api.config.ServiceConfigException: Failed to fetch default config version for service 'api.endpoints.<my-project-id>.cloud.goog'. No versions exist!
at com.google.api.config.ServiceConfigSupplier.fetchLatestServiceVersion(ServiceConfigSupplier.java:155)
....
然后,部署会陷入一个无休止的循环,试图启动jetty,然后被该错误消息击中,然后重新启动等等。任何访问localhost:8080的尝试都会导致"503: Service not“错误。
我假设我的应用程序的本地部署可以访问使用"gcloud服务管理部署“部署的服务配置,就像appspot.com部署一样,但情况不是这样吗?查看ServiceConfigSupplier.getchLatestServiceVersion()的源代码,我估计serviceManagement.services().configs().list(my-service-name).execute().getServiceConfigs()正在返回一个空列表,但是为什么这只发生在本地呢?
额外信息
我的ENDPOINTS_SERVICE_NAME环境变量匹配'api.endpoints.my-project-id.cloud.goog‘
我注意到几天前com.google.api.config有一个更新(1.0.2),它依赖于较旧版本的com.google.api.services.servicemanagement (依赖于v1-rev14-1.22.0,最新版本是v1-rev340-1.22.0),我怀疑这是个问题,但我想我要提一下,因为它包含与异常相关的类(ServiceManagement被ServiceConfigSupplier使用,它正在抛出异常)。也许在他们寻找服务吐露的地方有不一致之处?
我有点不知所措,有点过头了。我不喜欢删除端点,因为我开始喜欢它了,但我们也不能真正失去对devserver的使用。我希望有人能对这个问题有所了解。
发布于 2017-04-10 20:36:10
这不是一个修复,但我能够通过使用https://stackoverflow.com/a/41493548/1410035中的建议来解决这个问题。
即,注释掉ServiceManagementConfigFilter
( b)将ServiceManagementConfigFilter从web.xml中剔除(
请注意,您必须注释掉filter
和 filter-mapping
,它们在文件中的位置不同。
我发现我不需要删除链接答案中的'a‘点中提到的缩放块。
发布于 2017-03-29 19:36:29
如果您已经删除了所有最近的更新,这可能与权限问题有关。git pull
还可以使用:gcloud components update
检查Cloud是否是最新的。
假设您遵循了在https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java上列出的说明。为了解决这个问题,您可以创建一个具有必要权限的服务帐户,或者使用命令gcloud auth application-default login
。
您可以在https://cloud.google.com/sdk/docs/authorizing上使用Cloud设置服务帐户。
如果你还有问题,请告诉我。
至于命令gcloud auth application-default login
。根据帮助描述:
通过web流获取用户访问凭据,并将它们放置在应用程序默认凭据的著名位置,以便将它们用作服务帐户的代理。
当您使用此命令时,它将获得gcloud您的Gmail帐户的凭据。something@gmail.com,然后将凭据存储在已知包含应用程序凭据的位置。
发布于 2017-06-08 13:54:14
它与"gradle appengineRun“一起工作,但在IntelliJ Idea项目中,我不得不替换web.xml和appengine-web.xml中的所有${endpoints.project.id},以从IntelliJ运行/调试本地主机(从gradle源代码导入,安装GoogleCloudTools插件,并从Tools /GoogleCloudTools/在本地appengine标准dev服务器上运行运行/调试配置)。
我的错误是:未能获取服务'echo-api.endpoints.${endpoints.project.id}.cloud.goog'.的默认配置版本。不存在版本!
cloud.google.com文档只有Maven构建示例Gradle构建在github.com上
https://stackoverflow.com/questions/42421042
复制