首页 > 解决方案 > 为什么 Go 程序挂在 gcloud app deploy 上?

问题描述

我正在尝试在 github 上设置以下存储库的本地版本,https://github.com/microsoft/mouselog,除了添加具有以下内容的 app.yaml 之外,我没有进行任何更改。

runtime: go112
env: standard

service: mouselogserver

当我使用 CLI 工具运行 gcloud app deploy 时,它会在以下命令处挂起至少 15 分钟。

DEBUG: Executing command: [u'mydir\\google_appengine\\go-app-stager.exe', u'mydir\\server\\app.yaml', u'mydir\\server', 'mydir\\local\\temp\\tmpdtk2gh\\tmpqcbdbm']

我假设这不是预期的行为?使用 nodejs 运行 gcloud app deploy 最多需要 30 秒。

标签: gogoogle-app-enginegcloud

解决方案


通常,部署预计不会花费 25 分钟。我将在下面解释一种可能的原因。

App Engine 部署与存储桶交互staging.<project-id>.appspot.com。此存储桶在您首次部署到 App Engine 时默认创建,用于存储中间构建输出,以便以与 Docker 层类似的方式缩短即将进行的部署时间。大多数情况下,这有助于通过不需要“重新构建”未更改的部分来提高部署速度。

存储在暂存桶中的文件在插入 15 天后将被清除。但是,如果应用程序在短时间内大量部署文件并更改文件,则会在存储桶中创建大量临时对象并且其大小会增长。这可能会减慢部署速度,因为所有这些都将被扫描以搜索可重用的中间构建。

如果这听起来像您的用例,则有一种解决方法是使用gcloud 标志 --bucket,该标志 允许使用用户提供的存储桶而不是暂存存储桶。

gcloud app deploy --bucket <YOUR-BUCKET>

尽管如此,如果这不能解决问题,您可能需要打开支持票,以便可以进一步调查问题,因为我们在这里缺乏自己做的工具。


推荐阅读