我们已将 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 。

通常,由于其他一些原因,这种部署实践是好的/推荐的:

  • 避免潜在的中断,请参阅 Continuous integration/deployment/delivery on Google App Engine, too risky?
  • 避免潜在的流量丢失,同时 GAE 启动足够多的新版本实例来处理流量负载,请参阅 GAE shutdown or restart all the active instances of a service/app
  • 的第二部分

    潜在兴趣:Google Frontend Retention between deployments

    关于google-app-engine - Google App Engine - 保留以前版本的静态文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58191207/

    10-12 12:24
    查看更多