流浪者共享文件夹和文件更改事件


14

我有要通过Vagrant访问的ubuntu虚拟机。在我的主机(Mac OSX)上,有一个包含几个文件的文件夹,我将它们共享到虚拟机。在该虚拟机中,我想使用防护来监视文件更改并在其中任何文件更改时执行一些操作。

我正确设置了防护功能,并且在虚拟机中更改共享文件时,它可以正常运行并运行适当的脚本。但是,如果我尝试从主机更改共享文件,则此文件更改事件不会传播,并且防护也不会做出反应。

这就是我无业游民的共享文件夹的样子(很普通的东西)

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

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

有什么方法可以使文件更改事件从主机传播到虚拟机?还是这是Vagrant / VirtualBox的本质?

更新:

经过更多的试验后,我安装了ZenTest gem,它包含自动测试工具,该工具允许有关文件更改事件的类似功能。

在虚拟机中运行自动测试并从我的主机更改文件时,这些更改会传播并自动测试做出反应

基于此,文件更改事件的传播似乎是警惕的问题,而不是无所事事或虚拟的盒子。

我还没有研究过保护和自动测试之间的实现差异。

现在,我知道可以从虚拟机中的主机捕获文件更改事件。有谁知道如何使用后卫来实现这一目标?我更喜欢警卫,因为它具有DSL和通用的可用性。

Answers:


10

根本原因是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


谢谢加布,前段时间我离开了守卫。尽管如此,您的答案对于理解仍然很有价值。
rdamborsky

4

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

警卫队-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 (e.g. 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, e.g.
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'

1

如果有人遇到此问题而警卫仍然无法正常工作...

我最终使用了watchr。它是卫兵的替代品。从主机传播到来宾计算机的事件在watchr中正常运行。它也比自动测试更灵活。


Events propagation from host to guest machine works ok in watchr.怎么样?它使用轮询吗?如果VirtualBox没有传播事件,它怎么知道文件何时更改?
Nateowami
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.