我有一个Google App Engine,在其中部署了不同的服务,但是对于某些服务,提供了错误的证书。
我不知道什么时候部署失败,但是当服务部署不起作用时,我再试一次部署也没关系,它继续不起作用。
标准行为:
https://<service>-dot-<project>.appspot.com
错误行为:
https://service.project.appspot.com
(请注意,该网址具有.
而不是-dot-
-dot-
的网址无法解析*.appspot-preview.com
的证书,由于存在HSTS,我无法绕过它 GCP控制台不报告任何内容:控制台中的所有位置都链接到假定正确的网址(带有-dot-
的网址),给我一个未解析的域。显示有效URL的唯一位置是部署后的终端
我使用gcloud app deploy --project ${PROJECT} --version ${COMMIT_SHA}
进行部署,而我的app.yaml
是:
runtime: python27
service: <service_name>
threadsafe: true
api_version: 1
handlers:
- url: /
static_files: dist/index.html
upload: dist/index.html
secure: always
- url: /(.*)
static_files: dist/\1
upload: dist/(.*)
secure: always
答案 0 :(得分:1)
经过一番调查,我发现了罪魁祸首:在documentation的service
部分,它说(强调我的意思):
每个服务和每个版本都必须有一个名称。名称可以包含 数字,字母和连字符。 它不能超过63个字符 并且不能以连字符开头或结尾。为每个选择唯一的名称 服务和每个版本。不要在服务和 版本。
这并不完全准确,因为每个RFC 1035的每个DNS标签最多可以包含63个字符,在我们的例子中,子域为<service>-dot-<project>
,这意味着<service>-dot-<project>
的长度不能超过63个字符,因此service
不能超过(63 - len(project) - 5)
个字符。
我使用的服务名称短于63个字符,但长于(63 - len(project) - 5)
。缩短服务名称可解决此问题。