我的Mac上有一些源代码,为了测试我有兴趣将它与包含类似Web服务器设置的VM同步到生产环境。因此,我需要能够在每次更改时自动将文件复制到VM。
我知道无论何时运行脚本我都可以使用rsync手动执行此操作但是我需要一些方法让它在每次修改特定目录或其子目录中的文件时在后台运行。
我知道inotifywait存在于Linux机器上,可以解决这个问题。我还读过有关FSEvents API和kqueue的内容。但是,这些似乎都不能从命令行访问,我真的不想花很长时间来做一些事情......
我想我可以使用cronjob但是等待一段时间才能看到网站上的更改......
有什么想法吗?
答案 0 :(得分:1)
我一直这样做,在Windows / Linux / Mac工作站上进行开发,并将更改保存到远程Linux服务器,然后立即将它们送回我的工作站浏览器进行测试。你有几个选择:
您可以在本地挂载远程文件(例如通过sshfs)并直接对它们进行更改。即,您的Mac认为文件是本地的,因此您可以使用GUI编辑器对其进行编辑,但是当您进行文件 - >保存时,它实际上会远程保存文件。这样做的主要缺点是,当与服务器断开连接时,您无法工作。
远程安装本地文件。这将允许您在断开连接时在本地工作,但在断开连接时不允许测试站点工作 - 这可能不是什么大问题。如果您在远程服务器上没有正确的工具/访问权限,则可能无法使用此选项。
(我的偏好。)使用NetBeans IDE,它具有非常好的“复制到远程”功能。您在本地维护所有文件的完整副本,并直接编辑它们。当您点击文件上的文件 - >保存时,NetBeans会将其本地和透明地保存到您的远程服务器上。
答案 1 :(得分:0)
如何使用像 git 或 mercurial 这样的DVCS,并让本地repo运行post-commit钩子来运行rsync然后测试本身?
我有点困惑为什么你不能从运行测试的同一个脚本运行rsync。如果运行rsync -e ssh
,则可以在VM和Mac之间设置自动公钥验证。在这种情况下,没有关于rsync的任何手册。
答案 2 :(得分:0)
您可以设置launchd代理以执行简单设置所需的操作。有关launchd WatchPath
密钥的详细信息,请参阅this question和man page for launchd.plist。但看起来WatchPath
可能不适用于changes within sub-directories。