在GCP应用引擎上部署具有代码分割的应用程序 - 加载块*失败。

3
我们有一个使用React创建的Web应用程序(前端),是通过Create React App创建的。该应用程序运行在Google Cloud Platform App Engine Standard上。我们的Web应用程序采用代码分割,每个页面在用户导航时加载。
它运行得非常好。问题在于例如用户A正在访问应用程序主页。我们部署了一个修复程序,更改了chunk文件名。然后用户A尝试访问另一页,然后出现错误“Loading chunk * failed”。获取文件的URL现在返回404,因为该文件已被一些新的chunk文件替换。
据我所见,在我的研究中这是一个常见的问题,但我没有找到适用于Google App Engine的解决方案。
这是一篇解释问题/解决方案的文章:https://mitchgavan.com/code-splitting-react-safely/ 我想使用解决方案1:“在部署后在您的服务器上保留旧文件”,但我不知道如何在GCP上实现这一点...
这是app.yaml文件。
service: frontend
runtime: nodejs14
env: standard
instance_class: F1

handlers:
  - url: /(.*\..+)$
    static_files: build/\1
    upload: build/(.*\..+)$
  - url: /.*
    static_files: build/index.html
    upload: build/index.html


我们有以下调度文件(*表示掩码URL):
dispatch:
  - url: "*"
    service: frontend

  - url: "www.*"
    service: frontend
1个回答

1

我之前没有尝试过这个方法,但看看它是否有意义/有效。

  1. 我们有一篇关于从GAE下载源代码的博客文章。其中解释了您部署时源代码存储的位置(暂存桶),它在那里停留的时间以及您如何修改它在Google自动删除之前停留的时间。

  2. 当您部署到GAE时,gcloud只会部署已更改的文件(不会部署未更改的文件)。由于现在有“新”的文件,因为生成了新的哈希值,旧文件不再存在于本地计算机上。我不知道Google是否会自动从第1个项目中的暂存位置删除这些文件。

  3. 我的建议是按照第1点中的博客文章中的步骤,并更改(修改)文件在暂存桶中保留的时间。另一个选项是检查保留策略选项卡并查看是否可以更改规则,使文件不被删除。如果您能够更改文件保留时间或保留策略,它可能会解决您的问题。让我知道这是否可行。


1
谢谢您的评论,我已经尝试过了,但是它没有起作用 :/ 这似乎与App Engine版本有关。 - Charles-olivier Demers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接