【发布时间】:2009-11-25 13:08:50
【问题描述】:
好吧,我可能不是第一个尝试将基于 PHP 的 Web 界面与 rsync 放在一起以简化部署的人,但还是成功了。
我们在本地有一个“QA”服务器,在 Rackspace 有一个“Staging”服务器。我已经设置了 SSH 密钥配对,所以我可以在两台服务器之间进行 rsync 并且一切正常。问题是 rsync 对于它决定需要更新的内容有点不稳定。
我编写的脚本首先使用“--dry-run”参数执行 rsync,以获取需要传输的所有内容的列表。命令如下:
$strCheck = shell_exec(
"rsync " .
"--verbose " .
"--recursive " .
"--safe-links " .
"--checksum " .
"--dry-run " .
"--delete " .
"--delete-excluded " .
"--force " .
"--cvs-exclude " .
"--human-readable " .
"/apps/{$system}/ " .
"user@liveserver:/apps/{$system}_staging/"
);
现在一切正常,我可以将返回的字符串解析为需要删除的内容和需要添加/更新的内容。然后,我构建了一个 HTML 表,它会根据每个复选框在层次结构中的位置自动缩进它。我还使用了一些 javascript,因此我可以允许用户选择文件夹中的所有文件。
如果要添加/删除文件夹本身,则将其包含在列表中。例如:
/newfolder/
/newfolder/file1.php
/newfolder/file2.php
这很好,因为 '/newfolder/' 将显示一个缩进,而 '/newfolder/file1.php' 和 '/newfolder/file2.php' 将分别在 '/newfolder/' 下面显示两个缩进. “/newfolder/”旁边的复选框会自动选中两个“子”文件,大家都很高兴。
但是,如果只是将文件添加/更新到文件夹中,则会忽略文件夹本身:
/oldfolder/filea.php
/oldfolder/fileb.php
...
这意味着 '/oldfolder/' 中的所有文件都有两个缩进,但没有可见的机制来选择文件夹中的所有文件。
所以我的问题是:我在可用的 rsync 参数中是否缺少某些东西,我可以强制它包含任何更新文件的文件夹,还是我必须在循环遍历数组时添加它们?如果是后者,最好的方法是什么?
Obi Stack Overflowbi 帮帮我,你是我唯一的希望...
【问题讨论】:
-
+1 表示问题的质量和主题,以及荒谬的参考。