Sam*_*den 7 java google-app-engine maven google-cloud-endpoints openapi
我正在将Java端点框架(2.0.1)用于Java作为我最后一年项目的一部分,到目前为止它已经相对成功.部署到我的appspot.com域时没有任何问题,但是,我在本地部署时遇到了一些问题.
(以下代码块中对my-project-id的任何引用都是我实际的Google云项目ID的别名)
我有一个带注释的@API类的有效openapi描述符(openapi.json),我使用"gcloud service-management deploy openapi.json"将其部署到云端点.该命令成功返回:
Service Configuration [2017-02-23r0] uploaded for service [api.endpoints.<my-project-id>.cloud.goog]
Run Code Online (Sandbox Code Playgroud)
然后我将返回的config_id映射到app.yaml中正确的endpoints_api_service
endpoints_api_service:
name: api.endpoints.<my-project-id>.cloud.goog
config_id: 2017-02-23r0
Run Code Online (Sandbox Code Playgroud)
该服务由gcloud cli工具使用"gcloud service-management list"列出
NAME TITLE
storage-component.googleapis.com Google Cloud Storage
api.endpoints.<my-project-id>.cloud.goog api.endpoints.<my-project-id>.cloud.goog
etc...
Run Code Online (Sandbox Code Playgroud)
和"gcloud service-management configs list --service api.endpoints.my-project-id.cloud.goog"
CONFIG_ID SERVICE_NAME
2017-02-23r0 api.endpoints.<my-project-id>.cloud.goog
... other version configs
Run Code Online (Sandbox Code Playgroud)
并且可以在我的appspot.com域上访问(我可以调用端点并收到正确的响应)
我正在尝试使用java的maven appengine插件(mvn appengine:devserver)在localhost上部署我的项目,但是在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)
....
Run Code Online (Sandbox Code Playgroud)
部署然后陷入无休止的循环,尝试启动jetty,并被该错误消息,并重新启动等.任何尝试访问localhost:8080导致"503:服务未找到"错误
我假设我的应用程序的本地部署能够访问使用"gcloud service-management deploy"部署的服务配置,就像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)我怀疑这是问题,但我想我会提到它,因为它包含与异常相关的类(ServiceManfigSupplier使用ServiceManagement,它正在抛出例外).他们在寻找服务配置的地方可能存在不一致之处?
我很难过,这有点过头了.我不喜欢删除端点,因为我开始喜欢它,但我们也不能真正失去对我们的devserver的使用.我希望有人能够对这个问题有所了解.
如果您已提取所有最近的更新,这可能与权限问题有关。git pull另外,请使用以下命令检查您的 Cloud SDK 是否是最新的:gcloud components update。
假设您按照https://cloud.google.com/endpoints/docs/frameworks/java/quickstart-frameworks-java中列出的说明进行操作。要解决此问题,您可以创建具有必要权限的服务帐户或使用命令gcloud auth application-default login。
您可以使用 Cloud SDK gcloud 设置服务帐户:https://cloud.google.com/sdk/docs/authorizing
如果您还有疑问,请告诉我。
至于命令gcloud auth application-default login。根据帮助说明:
通过 Web 流获取用户访问凭据,并将其放入应用程序默认凭据的众所周知位置,以将其用作服务帐户的代理。
当您使用此命令时,它会获取您的 Gmail 帐户的 gcloud 凭据。some@gmail.com,然后将凭据存储在已知包含应用程序凭据的位置。
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |