我是一个营销团队的开发人员,经常被要求的功能之一是:我们可以回去看看我们的网站(或 X 页面)在 X 中的样子。
有什么好的解决方案可以解决这个请求吗?
源代码控制应该能够在内部解决您的请求。适当地标记事物并有一个内部服务器来部署该标签,你应该没有问题。如果您有一个自动部署工具并明智地选择您的标签,那么编写一个应用程序应该相对简单,该应用程序将在标签 X 处检查您的源并部署它,只需让用户输入标签即可。现在,如果您的标签与日期类似,他们只需以正确的格式输入日期并等待 5 分钟即可部署。
与其他人的建议类似,(假设是一个动态网站)我会使用输出缓存来生成网页的代码,然后使用 Subversion 来跟踪更改。
使用 WayBack 机器可能只是最后的手段,例如,如果有人要求查看您设置此系统之前的网页。不能依靠 WayBack Machine 来容纳所需的一切。
我的建议是每天晚上简单地在网站上运行wget并将其存储在archive.yourdomain.com
. 为具有将当前页面的 URL 传递到日期选择器的适当权限的用户添加一个控件到每个页面。一旦选择了日期, load archive.yourdomain.com/YYYYMMDD/original_url
。
让用户浏览整个站点而没有损坏的链接archive.yourdomain.com
可能需要重新编写一些 URL 或将站点的存档副本从某个存储库复制到archive.yourdomain.com
. 为了节省磁盘空间,这可能是最好的选择。存储wget
压缩后的副本,然后提取用户请求的日期。这有一些问题,例如您如何处理希望同时查看不同日期的多个存档页面的多个用户等。
我建议wget
每晚在您的网站上运行优于从源代码管理中检索它,因为您将获得显示给 WWW 访问者的页面,包括任何动态提供的内容、错误、遗漏、随机旋转广告等。
编辑:您可以将wget
输出存储在源代码控制中,我不确定将它压缩到源代码控制之外的某个文件系统上会为您带来什么。另请注意,假设网站大小不限,该计划会随着时间的推移消耗大量磁盘空间。
正如格兰特所说,您可以将 wget 与版本控制结合起来以节省空间。实际上,我正在尝试编写一个脚本来为我通常的浏览执行此操作,因为我不相信 Internet 存档或 WebCite 会无限期地存在(而且它们不是很容易搜索)。
脚本会是这样的: cd to directory; 调用正确的wget --mirror
命令或其他;运行darcs add $(find .)
以将任何新文件检入存储库;然后darcs record --all
。
Wget 应该用更新的版本覆盖任何更改的文件;darcs add 将记录任何新文件/目录;darcs 记录将保存更改。
要获得日期 X 的视图,您只需从您的存储库中提取最新 X 的所有补丁。
您不会无限期地存储许多重复副本,因为 DVCS 不会保存历史记录,除非文件内容发生实际更改。在页面更改为不再需要 CSS 或 JS 或您之前下载的图像的意义上,您将获得“垃圾”,但您可以定期删除所有内容并将其记录为补丁,下一次 wget 调用只会拉入需要最新版本的网页。(而且您仍然可以进行全文搜索,只是现在您搜索的是历史记录而不是磁盘上的文件。)
(如果正在下载大型媒体文件,您可以rm $(find . -size +2M)
在它们被darcs add
编辑之前将其删除。)
编辑:我最终没有为显式版本控制而烦恼,而是让 wget 创建重复项并偶尔使用fdupes
. 请参阅http://www.gwern.net/Archiving%20URLs
看看返回机器的方式 ,它并不完美,但我还在那里工作过一些令人尴尬的旧网站:)
你看过archive.org上的回程机器吗?
http://www.archive.org/web/web.php
如果这不能满足您的需求,也许您可以使用您的源代码控制存储库自动执行某些操作,以提取特定日期的版本。
WayBackMachine可能会有所帮助。
根据您的页面以及您的要求,您可能会考虑将页面的副本放在源代码管理中。
如果您的内容在数据库中,这可能不起作用,但如果它们只是您随时间更改的 HTML 页面,那么 SCM 将是执行此操作的正常方法。每个人都提到的 WayBackMachine 很棒,但这个解决方案更针对公司,让您可以捕捉到随着时间的推移而变化的细微差别。您无法控制 WayBackMachine(据我所知)。
在 Subversion 中,您可以设置挂钩并自动执行此操作。事实上,如果您使用数据库中的内容,这甚至可能会起作用......