在不影响用户的情况下推送网站更新

Push website updates without affecting the user

我现在正在我的第一个网站上工作,当我更新文件(将最新版本上传到服务器)时,例如样式表或 .php 文件,我会尝试在 uploaded/changed 中途加载页面时,我得到一个空白屏幕或损坏 CSS。有时必须清除缓存才能加载正确的样式表。

向用户推送更新时,如何避免这种情况?

一种方法是使用 "cache busting"。每次更改 .css.js 文件时,您都会重命名该文件。

style_v1.0.css // Release 1.0
style_v1.1.css // Release 1.1
style_v2.0.css // Release 2.0

或在文件名后执行:

style.css?v=1.0 // Release 1.0
style.css?v=1.1 // Release 1.1
style.css?v=2.0 // Release 2.0

关于 .php 文件更新,用户应该只收到来自更新文件的新响应。 关于 CSS,我建议通过 jQuery 尝试一些 JavaScript。

无论哪种方式,最好不要在网站的实时版本上工作,而是在保存在本地计算机或服务器上的另一个文件夹上的 "sandbox" 副本中工作,然后实现了所需的功能,请在晚上或您的网站流量最少时上传文件。

我们都去过那里并做到了这一点。虽然这个问题可能不适合 Stack Overflow,但它有可能会留在这里,其他人会找到它。考虑到这一点,这是我使用的示例工作流程和一些提示:

一般提示

  • 永远,永远,永远,永远不要在网站上实时工作。始终备份并使用 WAMP、MAMP、LAMP 或类似工具
  • 在您的计算机上进行本地设置
  • 设置源代码管理。有很多提供商可以为您提供免费帐户供您使用。
  • 了解 .git 和分支
  • 不要使用 FTP。问题多多
  • 通过 SSH 连接到您的服务器。如果您不确定自己在做什么,请阅读一些教程。

工作流程

我在网站上工作时的典型工作流程如下:

  1. 从 .git
  2. 克隆 repo
  3. 在本地设置网站
  4. 修改文件、网站
  5. 将这些更改提交回源代码管理并推送到 develop 分支。
  6. 运行 开发代码的一些测试(selenium/similar)
  7. 如果这些测试通过,通过执行 git merge develop --no-ff -m "message"
  8. 将 develop 分支合并到 master 分支
  9. 设置 webhook 以将代码推送到您的 server/live/production 网站。
  10. 只有在以下两种情况下才进行生产推送:
    • 访客处于低潮期(即晚上)
    • 当您有足够的时间解决问题时
  11. 如果在推送到生产环境时出现任何问题,请回滚到上一个版本并找出问题所在。

您还可以将时间戳附加到您的文件名,这样每次刷新时您都会得到唯一的文件

<script src="../assets/js/header.js?rndstr=<?php echo getCurrentTimeStamp();?>"></script>


function getCurrentTimeStamp(){
    return date('Y-m-d G:i:s');
}