Vagrant共享文件夹和文件更改事件

我有通过Vagrant访问的Ubuntu虚拟机。 在我的主机(Mac OSX)上,有一个文件夹,里面有几个文件,我可以共享到虚拟机。 在那个虚拟机中,我想使用guard来监视文件的变化,如果这些文件中的任何一个发生了变化,请执行一些操作。

我正确地设置了警戒,并且在从虚拟机内改变共享文件时,它工作正常并运行适当的脚本。 但是,如果我尝试从我的主机更改共享文件,此文件更改事件不传播和防护不反应。

这是我的stream浪者共享文件夹的样子(很平常的东西)

local_config.vm.share_folder "app", "/var/www/app/current", "../app" 

我甚至尝试使用NFS共享( :nfs => true ),但没有帮助。

有没有办法让文件更改事件从主机传播到虚拟机? 还是这是stream浪/ VirtualBox的性质?

更新:

经过一些更多的试用后,我安装了ZenTest gem,其中包含了自动testing工具,允许关于文件更改事件的类似function。

在虚拟机中运行自动testing并更改来自主机的文件时,会传播这些更改并进行自动testing

基于此,文件转换事件传播似乎是一个守卫问题,而不是stream浪者或虚拟框。

尽pipe如此,我还没有看到守卫和自动testing之间的实施差异。

现在我知道可以从虚拟机中的主机捕获文件更改事件。 有谁有任何想法如何实现这个使用后卫? 我更喜欢守卫,因为它的DSL和通用可用性。

根本原因在于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] 

http://www.softr.li/blog/2012/07/21/running-guard-over-vagrant

我知道这是一个较老的问题,但这是一个更新的答案:

Guard -o/--listen-on选项文档

粘贴在这里作为快速参考:

 -o/--listen-on option Use Listen's network functionality to receive file change events from the network. This is most useful for virtual machines (eg Vagrant) which have problems firing native filesystem events on the guest OS. Suggested use: On the host OS, you need to listen to filesystem events and forward them to your VM using the listen script: $ listen -f 127.0.0.1:4000 Remember to configure your VM to forward the appropriate ports, eg in Vagrantfile: config.vm.network :forwarded_port, guest: 4000, host: 4000 Then, on your guest OS, listen to the network events but ensure you specify the host path: $ bundle exec guard -o '10.0.2.2:4000' -w '/projects/myproject' 

如果有人遇到这个问题,警卫仍然没有工作…

我结束了使用看守 。 这是一个守卫的替代scheme。 从主机到客户机的事件传播在watchr中正常工作。 它比自动testing更灵活。