You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Google App Engine部署成功后仍运行旧版本代码?

可能的原因
  • App Engine流量未完全切到新版本:若开启了渐进式流量迁移,或部署时未指定新版本接收全部流量,即使新版本部署成功,请求仍会被分配给旧版本实例。可在GAE控制台「版本」页查看当前流量分配比例确认。
  • 旧预热实例未销毁:GAE为降低冷启动延迟,会保留旧的预热实例到新版本实例完全健康运行后再下线,部署完成后的数分钟内仍可能有请求走旧实例。
  • AdonisJS生产环境缓存未更新:AdonisJS生产模式会缓存路由、配置、ORM元数据等内容,如果部署流程没有在代码更新后清理旧缓存、生成新缓存,运行时会读取旧缓存对应的旧逻辑。
  • Node.js进程未完全重启:GAE常驻实例中的Node.js进程如果没有被完全终止重启,会持有旧代码的内存快照,不会加载新的文件内容。
解决步骤
  1. 确认并切换全量流量:进入Google Cloud控制台 → App Engine → 服务 → 对应API服务的「版本」标签,勾选最新部署的版本,点击「迁移流量」将100%流量分配给新版本,操作完成后等待3分钟再测试访问。
  2. 清理旧版本实例:流量完全切换后,选中所有历史旧版本,执行「停止」操作,强制销毁所有运行旧代码的实例,避免残留请求命中旧实例。
  3. 调整部署构建脚本:在package.json的构建命令或app.yaml的启动前置脚本中加入AdonisJS缓存处理命令:
# 清理所有旧缓存
node ace cache:clear
# 重新生成生产环境的配置、路由缓存
node ace config:cache
node ace route:cache

确保缓存生成操作是在代码更新后执行,不要将本地生成的旧缓存打包到部署包中。
4. 强制实例冷启动:如果以上操作仍无效,可以临时将对应服务的实例数调整为0,等待1分钟所有实例销毁后,再调回原来的实例配置,强制所有实例重新拉取最新代码启动。

内容的提问来源于stack exchange,提问作者Zach W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:48:04