Pasta compartilhada do Vagrant e eventos de mudança de arquivo

13

Eu tenho uma máquina virtual Ubuntu que estou acessando através do Vagrant. No meu host (Mac OSX), há uma pasta com alguns arquivos que compartilho na máquina virtual. Nessa máquina virtual, quero usar o guard para observar as alterações nos arquivos e realizar alguma ação se algum desses arquivos for alterado.

Eu configurei a proteção corretamente e, ao alterar o arquivo compartilhado na máquina virtual, ele funciona corretamente e executa os scripts apropriados. Mas, se eu tentar alterar o arquivo compartilhado da minha máquina host, esse evento de alteração de arquivo não se propaga e a proteção não reage.

Esta é a aparência da minha pasta compartilhada vagante (coisas muito comuns)

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

Eu até tentei usar o compartilhamento NFS ( :nfs => true ), mas isso não ajudou.

Existe alguma maneira de fazer com que os eventos de alterações de arquivos sejam propagados do host para a máquina virtual? Ou isso é algo da natureza do Vagrant / VirtualBox?

ATUALIZAÇÃO:

Depois de mais alguns testes, instalei o ZenTest gem, que contém uma ferramenta de autoteste que permite uma funcionalidade semelhante em relação a eventos de alteração de arquivo.

Ao executar o autoteste na máquina virtual e alterar os arquivos da minha máquina host, essas alterações são propagadas e o autotest reage .

Com base nisso, parece que a propagação do evento de mudança de arquivo é um problema de guarda, não de caixa virtual ou vagrant.

No entanto, não investiguei as diferenças de implementação entre guarda e autoteste.

Agora sei que é possível capturar eventos de alteração de arquivo do host na máquina virtual. Alguém tem alguma idéia sobre como conseguir isso usando guarda? Eu gosto de guarda mais por causa de sua usabilidade DSL e genérica.

    
por rdamborsky 30.11.2012 / 13:12

3 respostas

10

A causa raiz é que o VirtualBox não coloca em cascata os eventos de alteração de arquivo no host para a VM. O Guard (no Linux) espera receber notificações via eventos inotify. Em vez disso, você pode ter uma pesquisa de opinião para eventos com guard -p , mas isso pode levar a uma sobrecarga de CPU, para que você possa reduzir a pesquisa novamente com guard -p -l 10 .

De guard help start :

  -l, [--latency=Overwrite Listen's default latency]
  -p, [--force-polling=Force usage of the Listen polling listener]

link

    
por 13.04.2013 / 07:40
4

Eu sei que esta é uma pergunta mais antiga, mas aqui está uma resposta mais atualizada:

Documentação da opção Guard -o/--listen-on

Colado aqui para referência rápida:

-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'
    
por 12.11.2014 / 18:13
1

Se alguém se deparar com esta questão e a guarda ainda não estiver a funcionar ...

Acabei usando o watchr . É uma alternativa para proteger. A propagação de eventos do host para a máquina convidada funciona corretamente no watchr. Também é mais flexível que o autoteste.

    
por 23.12.2012 / 21:32