gcloud endpoints deploy 带有时间戳类型的错误

gcloud endpoints deploy Error with timestamp type

我已经成功部署了很多 google gRPC 云端点。

但这是我第一次在我的原型中使用时间戳类型,当我尝试部署我的 gRPC API 时,出现错误:

gcloud endpoints deploy services api_descriptor.pb api_config.yaml

ERROR: (gcloud.endpoints.services.deploy) INVALID_ARGUMENT: Cannot 
convert to service config.
'ERROR: google/protobuf/timestamp.proto:121:1: (at document line 76) 
Unexpected end tag '--)' with missing begin tag.'

我的命令生成api_descriptor.pb

protoc -I . backoffice*.proto \
--proto_path=. \
--include_imports \
--include_source_info \
--descriptor_set_out=api_descriptor.pb 

我的api_config.yaml

type: google.api.Service
config_version: 3

name: backoffice.endpoints.MY_PROJECT.cloud.goog

title: Backoffice gRPC API
apis:
- name: package.BackofficeApi

usage:
  rules:
  - selector: "*"
    allow_unregistered_calls: true

我找不到关于这个问题的任何信息...有什么想法吗?

不幸的是,这是 timestamp.proto 文件中的一个错误。

它是 been fixed,但听起来您的 protobuf 版本还没有修复。

幸运的是,你可以在本地解决这个问题 - 只需编辑 timestamp.proto(无论你在哪里;这取决于你使用的是哪个包)将第 121 行的 --) 分成-- 在第 121 行的末尾,) 在下一行,因为它在当前文件中(上面链接)。

protobuf 版本(3.5.0 - 3.5.2,截至 2018 年 5 月 9 日)似乎存在此问题,并且尚未在任何版本中修复。我在 "<python path>\Lib\site-packages\grpc_tools\_proto\google\protobuf\timestamp.proto"

找到了有问题的文件

替换行:

// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--)

// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime)

帮我解决了问题