Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web 网站部署的竞争条件_Web_Deployment_Race Condition - Fatal编程技术网

Web 网站部署的竞争条件

Web 网站部署的竞争条件,web,deployment,race-condition,Web,Deployment,Race Condition,假设我有一个包含2个文件的网站,静态托管在S3上: index.html script.js 我有一个方案,每次推送时,这些文件都会从远程来源通过git pull更新。不过,这让我想到,在更新文件时,git-pull可能会向服务器发出请求。这似乎会产生两个问题,导致页面错误: 返回部分更新的index.html或script.js 将旧的index.html返回给客户端。然后在服务器上更新这些文件。然后,客户端请求script.js,返回新版本 缓解这两个问题的良好做法是什么 我想第一个问题不会

假设我有一个包含2个文件的网站,静态托管在S3上:

  • index.html
  • script.js
  • 我有一个方案,每次推送时,这些文件都会从远程来源通过git pull更新。不过,这让我想到,在更新文件时,
    git-pull
    可能会向服务器发出请求。这似乎会产生两个问题,导致页面错误:

  • 返回部分更新的
    index.html
    script.js
  • 将旧的
    index.html
    返回给客户端。然后在服务器上更新这些文件。然后,客户端请求
    script.js
    ,返回新版本
  • 缓解这两个问题的良好做法是什么

    我想第一个问题不会是问题,假设文件系统操作是原子的,并且文件可以一次性更新。但是,我还没有看到任何解决第二个问题的方法,这似乎更难解决。

    解决方法#2的一种方法是使用缓存破坏方法,即在编译时以编程方式向script.js文件名添加哈希,例如。
    变成

    现在,当通过不匹配的
    index.html
    请求
    script-[whatever].js
    时,客户端会得到404而不是错误的脚本

    至于如何部署它,这取决于您的构建管道。你在用咕噜声/咕噜声/等等吗