快速概述问题。 我有一个在SVN网站,并检出在2个不同的服务器负载平衡。 这是一个Drupal站点,除了资产和文件目录以外的所有内容都在服务器上本地检出。
现在更新我必须手动更新两个本地签出(svn up)这很容易出错,如果我们决定添加另一个web服务器到循环中,将会产生更多的开销。
所以简而言之:我必须find一种方法来自动保持2个本地签出的同步,所以我只需要在1台服务器上进行更新,一切都会同步。
我已经尝试过的事情:
md5使用find命令在服务器1上的目录和通过服务器2上的SSH(不包括.svn目录)的总和,然后使用diff的结果作为参数在服务器2上执行svn ups。 它总是给我不同的文件。
ssh $ TARGET“cd”$ SVN_TARGET“&& find。-name .svn -prune -o -type f -print0 | xargs -0 md5sum”>> /tmp/server2.sums
cd $ SVN_SOURCE && find。 -name .svn -prune -o -type f -print0 | xargs -0 md5sum >> /tmp/server1.sums
diff /tmp/server1.sums /tmp/server2.sums | 切“-d”。 -f2 | xargs -i ssh $ TARGET“su www-data -c'svn up / dir / to / svn / repo / {} –username \”******* \“–password \”**** ** \ “'”
使用svn info,然后使用svn diff和head revision来给我所有的文件改变。 问题就在于本地修订版本号与SVN服务器上的修订版本不一致,即使它是最新版本也是如此。
任何帮助是非常赞赏和理由的墙壁的借口:)
每个运行一个脚本的主机上的crontab条目每隔五分钟怎么样? 该脚本可以更新svn仓库,并做任何后处理被认为是必要的…。
或者你可以在subversion中有一个post-commit钩子触发部署到两个客户端…。
怎么样在一个主机上执行一个控制作业在crontab中执行一个svn info来确定修订版本,然后执行一个svn更新到那个版本,同时运行一个ssh svn更新到另一个主机上的相同版本?
如果你在Linux操作系统上运行,你可以使用DRBD在块级同步两个SVN服务器之间的数据,而不用担心Subversion。
我强烈build议使用capistrano进行代码部署。 请参阅以下与Drupal集成的教程: 第一和第二 。