rda*_*sky 15 filesystems virtual-machines file-sharing virtualbox vagrant
我有通过 Vagrant 访问的 ubuntu 虚拟机。在我的主机 (Mac OSX) 上,有一个包含几个文件的文件夹,我将这些文件共享给虚拟机。在那个虚拟机中,我想使用guard来监视文件更改并在这些文件中的任何一个发生更改时执行一些操作。
我正确设置了警卫,当从虚拟机中更改共享文件时,它可以正常工作并运行适当的脚本。但是,如果我尝试从我的主机更改共享文件,则此文件更改事件不会传播并且防护不会做出反应。
这就是我的 vagrant 共享文件夹的样子(非常常见的东西)
local_config.vm.share_folder "app", "/var/www/app/current", "../app"
Run Code Online (Sandbox Code Playgroud)
我什至尝试使用 NFS 共享 ( :nfs => true) 但它没有帮助。
有没有办法让文件更改事件从主机传播到虚拟机?或者这是 Vagrant/VirtualBox 的本质?
更新:
经过更多的试验,我安装了ZenTest gem,它包含自动测试工具,允许有关文件更改事件的类似功能。
在虚拟机中运行自动测试并从我的主机更改文件时,这些更改会传播并自动测试做出反应。
基于此,似乎文件更改事件传播是保护问题,而不是流浪者或虚拟框。
不过,我还没有研究保护和自动测试之间的实现差异。
现在我知道可以从虚拟机中的主机捕获文件更改事件。有没有人知道如何使用守卫实现这一目标?我更喜欢guard,因为它的DSL 和通用的可用性。
Gab*_*esy 11
根本原因是 VirtualBox 没有将主机上的文件更改事件级联到 VM。Guard(在 Linux 上)希望通过 inotify 事件接收通知。相反,您可以使用 对事件进行保护轮询guard -p,但这会导致您的 CPU 最大化,因此您可以使用 来限制轮询guard -p -l 10。
来自guard help start:
-l, [--latency=Overwrite Listen's default latency]
-p, [--force-polling=Force usage of the Listen polling listener]
Run Code Online (Sandbox Code Playgroud)
http://www.softr.li/blog/2012/07/21/running-guard-over-vagrant