如何在Google App Engine中部署多版本应用并配置路径路由?
我来帮你搞定这个版本路由的问题!你已经知道怎么用gcloud app deploy --version=v3 .这类命令部署自定义版本了,接下来只需要配置路由规则,就能实现https://myproject.appspot.com/v2指向v2版本、/v3指向v3版本的效果,主要有两种常用方案,我给你详细拆解:
方法一:使用dispatch.yaml(推荐,集中管理路由)
这种方式是App Engine官方推荐的,因为可以在一个文件里统一管理所有路由规则,后续修改也更方便。
步骤1:创建dispatch.yaml文件
在你的项目根目录下新建一个名为dispatch.yaml的文件,内容如下:
dispatch: # 把所有/v2开头的请求路由到v2版本 - url: "*/v2/*" service: default version: v2 # 把所有/v3开头的请求路由到v3版本 - url: "*/v3/*" service: default version: v3 # 其他所有请求路由到默认版本(比如你的v1版本) - url: "*/*" service: default
注意:如果你的应用不是用默认服务(default),把
service字段改成你实际的服务名称即可。
步骤2:部署dispatch.yaml配置
在终端里执行以下命令,把路由配置部署到App Engine:
gcloud app deploy dispatch.yaml
步骤3:验证效果
部署完成后,直接访问https://myproject.appspot.com/v2就会自动跳转到v2版本的应用,访问/v3则会指向v3版本。如果想确认是否生效,可以在每个版本的应用里加个版本标识(比如首页显示“当前版本:v2”),方便验证。
方法二:在每个版本的app.yaml中配置路由前缀
如果你不想用dispatch.yaml,也可以直接在每个版本的app.yaml里指定对应的路径前缀,让App Engine自动路由。
针对v2版本的配置
修改v2版本的app.yaml,添加对应的handler规则:
runtime: 你的运行时(比如python39、nodejs18等) # 其他原有配置... handlers: # 匹配所有/v2开头的请求 - url: /v2/* script: auto # 根据你的运行时调整,比如python用auto,nodejs也用auto secure: always # 强制HTTPS,推荐开启
然后用命令部署v2版本:
gcloud app deploy --version=v2 .
针对v3版本的配置
同理,修改v3版本的app.yaml,把handler的url改成/v3/*,然后部署:
gcloud app deploy --version=v3 .
这种方式的缺点是路由规则和每个版本的代码绑定,后续如果要修改路由前缀,需要重新部署对应版本,灵活性不如dispatch.yaml。
一些注意事项
- 确保你已经成功部署了v2和v3版本,不然路由规则会找不到对应的版本,返回404。
- 如果需要调整默认版本(比如让根路径
/指向v1版本),可以用命令:gcloud app services set-traffic default --splits v1=100 - 测试时可以用
gcloud app browse --version=v2直接打开v2版本的预览页面,确认应用本身正常运行。
内容的提问来源于stack exchange,提问作者Myone

