【发布时间】:2019-07-18 04:36:14
【问题描述】:
我有一个 python27 appengine 应用程序。我的应用程序在代码初始化早期生成了 500 错误,我可以在 GCP 控制台的 StackDriver 调试器中检查堆栈跟踪。
我已经修补了代码,并在相同的服务名称和版本名称(即gcloud app deploy --version=SAME)下重新部署。不幸的是,旧错误仍然出现,堆栈跟踪中的行号反映了错误部署中的文件。如果我使用代码查看器来调试错误,我会被带到在线查看器中更新的修补代码——并且存在不匹配。它的行为就像应用程序实例正在保留代码的先前快照一样。
我对 GAE 的新鲜度和最终一致性保证很模糊。我是否必须等待一切才能为最新部署的版本提供服务?我可以强制它立即使用更新的代码吗?
我尝试过的事情:
我最初认为问题与版本控制有关,即可能请求在具有相同版本的实例之间进行负载平衡,但每个实例的代码略有不同。我对管理为新请求选择哪个 GAE 实例的实际规则有点模糊(尤其是 GAE 是否尝试基于源 IP 重用以前的实例)。当以相同的版本名称重新部署不同的代码时,我也不清楚活动实例是否会立即被销毁。
为了排除这种可能性,我尝试推送到新版本名称,然后删除所有以前的版本(使用gcloud app versions list 获取列表)。但这无济于事——尽管源代码在 GCP 控制台调试器中是最新的,但我仍然从旧代码中获得堆栈跟踪。等待几个小时也无济于事。
【问题讨论】:
-
您希望通过不更改版本来实现(或避免)什么?
-
谢谢。我已经添加了一些说明。这似乎是一件容易尝试的事情。我对版本控制的一致性保证很模糊,并希望涵盖更多的基础。我不太熟悉 GAE 如何将实例分配给传入请求,我也不确定 GAE 是否允许具有相同版本 ID 但不同代码的活动实例在任何给定时间共存。现在我知道actual cause,我意识到这些测试可能是不必要的。