使用JS和CSS缩小网站的Live版本

时间:2010-11-11 16:01:36

标签: svn hook minify production-environment

我将列出几个简单的事实,以便更好地理解我的目标。

我正在开发一个项目,我们称之为 AAA

  • 在我的网络服务器(数据中心),我有 AAA SVN存储库。
  • 在同一个网络服务器上,我有AAA的结帐版本(实时版本 - 公共HTML)
  • 我在家里第二次结帐,我开发了AAA项目

我在家开发的每个新版本提交对网络服务器的更改,然后更新实时区域。

现在我想介绍缩小的 JS和CSS版本。

经过一番谷歌搜索之后,SVN挂钩即可。 预提交提交后挂钩。

这就是我现在想到的:

  • 创建一个post-commit hook
  • 每当我提交新版本时,post-commit钩子都会运行一个脚本:
    • SVN更新网络服务器实时区域
    • 然后用缩小版本替换所有.css和.js文件

这适用于第一次提交。在第二次提交时,实时SVN更新失败,因为.css ans .js已经从第一次提交修改(缩小)。冲突。

解决方案:

1#对实时版本使用SVN导出而不是SVN更新。这需要很长时间并且在删除文件等方面存在问题。解决方案已排除。

2#强制SVN更新实时AAA版本并忽略更改(上一版本中的缩小文件)。这个解决方案对我有意义,但我没有找到一种方法来使SVN更新忽略当前的更改(缩小文件)。 这可能与SVN有关吗? 我尝试了SVN updade tf而没有工作。

3#愿意听取您的解决方案:)

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我不知道您的环境是什么,但您可以采用Capistrano部署实用程序使用的方法。

如果您的实时/生产环境支持软/符号链接(例如Linux),您所做的是:

  • 在部署路径中创建2个目录

    ~/path_to_site/current
    ~/path_to_site/releases
    
  • 将〜/ path_to_site / current设置为正在投放的目录

  • 执行SVN导出到版本目录,例如

    ~/path_to_site/releases/mysite_1234567 (timestamp)
    
  • 导出完成后,将当前/的软链接路径更改为指向最新版本,例如

    ~/path_to_site/current -> ~/path_to_site/releases/mysite_1234567
    

这种方法的好处是:

  • 您的网站在导出过程中未经修改。例如,在您执行svn更新的当前进程中,您的站点只有部分更新。如果有人在那一刻访问您的网站,谁知道他们会得到什么。
  • 该网站的每个更新版本都是100%干净的导出。由于缩小过程,不会弄乱应该删除或更改文件的文件。
  • 您有一个非常简单的机制可以回滚到之前的版本 - 只需将当前/符号链接指向版本中的上一个指南/
  • 在您目前进行SVN更新的方法中,您公开了所有.svn文件夹及其中包含的信息,因为它们与您公开的文件并排。这意味着有人可以获得有关存储库所在位置的信息等。一般来说,除了您希望人们实际能够访问您的公共文件夹之外,还有其他任何操作都是不好的做法。

像Capistrano这样的工具可以帮助自动化这样的流程,但不是必需的。无论哪种方式,这样的事情都可以使用post-commit钩子完成,具体取决于你的环境。

还应注意,并非所有服务器配置都允许您在所服务的文件夹的路径中使用符号/软链接。

答案 1 :(得分:0)

检查Hudson或Cruisecontrol等持续集成工具。这些工具能够以指定的频率监视存储库,并在结账后执行所需的任务。这可能满足您的需求。

答案 2 :(得分:0)

这是一个很好的。导出为版本,即。例如附加时间戳。然后使用符号链接控制实时版本。我使用linux,所以没关系。

与此同时,我找到了完成第一篇文章中描述的2#的工作:

首先 - CheckOut - 使用svn checkout作为实时版本 - 然后压缩.js和.css文件 第二到N - 更新 - svn reverve到所有.css和.js文件 - svn update - 然后压缩.js和.css文件

svn reverse将消除压缩文件,以便允许svn更新而不会发生冲突。

这种方式更快但我想我会按照你的方法。