网站部署的竞争条件

时间:2016-12-29 22:27:14

标签: web deployment race-condition

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

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

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

      我认为第一个问题不会成为问题,假设文件系统操作是原子的,文件只需一次更新即可。但是,我还没有看到解决第二个问题的任何问题,这似乎更难以解决。

1 个答案:

答案 0 :(得分:0)

解决#2的一种方法是使用缓存破坏方法,以编程方式在编译时向script.js文件名添加哈希值,例如: <script src="script.js">变为<script src="script-79b1264ad3bc303fd.js">

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

至于你如何部署它,它取决于你的构建管道。你在使用Grunt / Gulp / etc吗?