在不影响用户的情况下推送网站更新
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 连接到您的服务器。如果您不确定自己在做什么,请阅读一些教程。
工作流程
我在网站上工作时的典型工作流程如下:
- 从 .git
克隆 repo
- 在本地设置网站
- 修改文件、网站
- 将这些更改提交回源代码管理并推送到
develop
分支。
- 运行 开发代码的一些测试(selenium/similar)
- 如果这些测试通过,通过执行
git merge develop --no-ff -m "message"
将 develop 分支合并到 master 分支
- 设置 webhook 以将代码推送到您的 server/live/production 网站。
- 只有在以下两种情况下才进行生产推送:
- 访客处于低潮期(即晚上)
- 当您有足够的时间解决问题时
- 如果在推送到生产环境时出现任何问题,请回滚到上一个版本并找出问题所在。
您还可以将时间戳附加到您的文件名,这样每次刷新时您都会得到唯一的文件
<script src="../assets/js/header.js?rndstr=<?php echo getCurrentTimeStamp();?>"></script>
function getCurrentTimeStamp(){
return date('Y-m-d G:i:s');
}
我现在正在我的第一个网站上工作,当我更新文件(将最新版本上传到服务器)时,例如样式表或 .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 连接到您的服务器。如果您不确定自己在做什么,请阅读一些教程。
工作流程
我在网站上工作时的典型工作流程如下:
- 从 .git 克隆 repo
- 在本地设置网站
- 修改文件、网站
- 将这些更改提交回源代码管理并推送到
develop
分支。 - 运行 开发代码的一些测试(selenium/similar)
- 如果这些测试通过,通过执行
git merge develop --no-ff -m "message"
将 develop 分支合并到 master 分支
- 设置 webhook 以将代码推送到您的 server/live/production 网站。
- 只有在以下两种情况下才进行生产推送:
- 访客处于低潮期(即晚上)
- 当您有足够的时间解决问题时
- 如果在推送到生产环境时出现任何问题,请回滚到上一个版本并找出问题所在。
您还可以将时间戳附加到您的文件名,这样每次刷新时您都会得到唯一的文件
<script src="../assets/js/header.js?rndstr=<?php echo getCurrentTimeStamp();?>"></script>
function getCurrentTimeStamp(){
return date('Y-m-d G:i:s');
}