我们已将 Vue SPA 部署到 Google App Engine,它完全由静态处理程序提供服务。
我们面临的问题是,如果用户在我们的站点部署中期处于事件状态,那么他们的旧 Webpack 块 list 将变得无效(因为某些块的哈希被覆盖)。如果他们现在尝试路由到一个新页面并且该页面尝试获取被覆盖的块,我们会收到以下错误:
ChunkLoadError: Loading chunk Conversations failed.
(error: https://example.com/js/Conversations.71762189.js)
理想情况下,我们希望保留
N
(2-3?) 应用程序静态文件的先前版本。将所有 Assets 推送到 Cloud Storage Bucket 是我们唯一的选择吗?如果是这样,我们将如何修剪旧版本?
这是我的
app.yaml
供引用:runtime: nodejs10
instance_class: F4
automatic_scaling:
min_instances: 2
max_instances: 10
default_expiration: "30d"
error_handlers:
- file: default_error.html
handlers:
- url: /api/*
secure: always
redirect_http_response_code: 301
script: auto
- url: /js/*
secure: always
redirect_http_response_code: 301
static_dir: dist/js
- url: /css/*
secure: always
redirect_http_response_code: 301
static_dir: dist/css
- url: /img/*
secure: always
redirect_http_response_code: 301
static_dir: dist/img
- url: /(.*\.(json|js|txt))$
secure: always
redirect_http_response_code: 301
static_files: dist/\1
upload: dist/.*\.(json|js|txt)$
expiration: "10m"
- url: /.*
secure: always
redirect_http_response_code: 301
static_files: dist/index.html
upload: dist/index.html
expiration: "2m"
最佳答案
该问题通常发生在部署覆盖接收流量的现有服务版本时(即服务版本未更改)。来自 Deploying an app :
只要服务版本被部署并且未被删除或覆盖,其各自的静态 Assets 就保持可访问。
为防止问题始终使用新的服务版本进行部署,然后(逐渐)将流量迁移到新部署的版本。保留最新的 N 个服务版本将为您提供 N 组您想要的静态 Assets 。
通常,由于其他一些原因,这种部署实践是好的/推荐的:
潜在兴趣:Google Frontend Retention between deployments
关于google-app-engine - Google App Engine - 保留以前版本的静态文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58191207/