방랑자 공유 폴더 및 파일 변경 이벤트


14

Vagrant를 통해 액세스하는 우분투 가상 머신이 있습니다. 내 호스트 (Mac OSX)에는 가상 머신과 공유하는 몇 개의 파일이있는 폴더가 있습니다. 해당 가상 머신에서 guard 를 사용 하여 파일 변경을 감시하고 해당 파일이 변경되면 조치를 수행 하려고합니다 .

가드를 올바르게 설정하고 가상 시스템 내에서 공유 파일을 변경할 때 정상적으로 작동하고 적절한 스크립트를 실행합니다. 그러나 호스트 컴퓨터에서 공유 파일을 변경하려고하면이 파일 변경 이벤트가 전파되지 않고 보호가 반응하지 않습니다.

이것은 내 방랑 공유 폴더가 어떻게 보이는지입니다 (꽤 평범한 것들).

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

NFS 공유 ( :nfs => true)를 사용해 보았지만 도움이되지 않았습니다.

파일 변경 이벤트를 호스트에서 가상 머신으로 전파 할 수있는 방법이 있습니까? 아니면 이것이 Vagrant / VirtualBox의 성격입니까?

최신 정보:

더 많은 시험을 거친 후 파일 테스트 이벤트와 유사한 기능을 허용하는 자동 테스트 도구가 포함 된 ZenTest gem을 설치 했습니다 .

가상 시스템에서 자동 테스트를 실행하고 호스트 시스템에서 파일을 변경하면 이러한 변경 사항이 전파되고 자동 테스트 가 수행됩니다 .

이를 바탕으로 파일 변경 이벤트 전파는 방랑자 또는 가상 상자가 아닌 가드 문제입니다.

가드와 자동 테스트의 구현 차이점을 조사하지 않았습니다.

이제 가상 머신의 호스트에서 파일 변경 이벤트를 포착 할 수 있다는 것을 알고 있습니다. 경비원을 사용하여이를 달성하는 방법에 대해 아는 사람이 있습니까? 나는 그것의 DSL과 일반적인 유용성 때문에 더 경계하는 것을 좋아합니다.

답변:


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 2016 년

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

누구 든지이 문제가 발생하고 감시가 여전히 작동하지 않으면 ...

나는 watcher 사용 했다 . 경비의 대안입니다. 호스트에서 게스트 컴퓨터로의 이벤트 전파는 감시자에서 정상적으로 작동합니다. 자동 테스트보다 유연합니다.


Events propagation from host to guest machine works ok in watchr.어떻게? 폴링을 사용합니까? VirtualBox가 이벤트를 전파하지 않는 경우 파일이 언제 변경되었는지 알 수 있습니까?
Nateowami 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.