GAE标准Python环境部署的静态站点突然抛出gunicorn错误如何解决
故障原因
你当前的配置所有路由均为静态文件处理规则,无后端Python应用逻辑。Google App Engine Python 3.8标准环境近期调整了默认启动逻辑,默认会尝试启动gunicorn加载WSGI应用实例,由于你的项目没有对应的应用入口文件,gunicorn启动失败抛出WORKER_BOOT_ERROR类型的HaltServer错误。此前能正常运行是因为旧版runtime对全静态配置场景做了特殊兼容,该兼容逻辑在最近的版本更新中已失效。
官方托管方案说明
针对纯静态站点场景,当前官方确实更推荐使用Cloud Storage存储桶托管,无需管理运行时配置、无实例启动开销,成本更低,也不会遇到这类运行时逻辑变动导致的故障。
修复方案
方案1:继续使用GAE Python标准环境托管
只需在现有配置基础上添加入口配置,覆盖默认的gunicorn启动逻辑即可:
- 在项目根目录的
app.yaml中新增entrypoint配置,指定一个常驻阻塞进程即可(所有请求都会被你配置的静态handler处理,不会用到该进程):
runtime: python38 service: webapp # 新增以下这行 entrypoint: tail -f /dev/null handlers: # 此处保持你原有handler配置不变即可 - url: / static_files: dist/index.html upload: dist/index.html expiration: "0m" secure: always - url: /([^.]+?)\/?$ static_files: dist/index.html upload: dist/index.html expiration: "0m" secure: always - url: /(.*) static_files: dist/\1 upload: dist/(.*) expiration: "0m" secure: always
- 重新执行部署操作即可恢复正常访问。
方案2:切换为存储桶托管
如果没有特殊的GAE功能依赖,直接切换为存储桶托管静态站更省心,仅需将静态资源上传到开通了公共读权限的存储桶,配置静态网站功能即可直接使用。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

