好的,我可能不是第一个尝试将基于 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,你是我唯一的希望......