14 votos

Vagabundo compartido eventos de cambio de archivo y carpeta

He máquina virtual con ubuntu que estoy accediendo a través de Vagrant. En mi host (Mac OSX), hay una carpeta con un par de archivos, que puedo compartir a la máquina virtual. En esa máquina virtual, quiero usar la guardia para vigilar los cambios de los archivos y realizar algún tipo de acción si cualquiera de los archivos de los cambios.

Puedo configurar custodiar adecuadamente, y cuando se cambia de archivos compartidos desde dentro de la máquina virtual, que funciona bien, y se ejecuta secuencias de comandos adecuados. Pero, si trato de cambiar el archivo compartido desde mi host de la máquina, este archivo de evento de cambio no se propagan de guardia y no reacciona.

Esta es la forma en que mi vagrant carpeta compartida parece (algo bastante habitual cosas)

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

Incluso he intentado usando NFS compartido (:nfs => true) pero no, no ayuda.

¿Hay alguna manera de hacer los cambios en el archivo de eventos de propagar a partir de host de la máquina virtual? O es esto algo de Vagrant/VirtualBox naturaleza?

ACTUALIZACIÓN:

Después de varias pruebas, he instalado ZenTest gema, que contiene autotest herramienta que permite una funcionalidad similar con respecto archivo de eventos de cambio.

Cuando se ejecuta autotest en la máquina virtual y el cambio de archivos de mi host de la máquina, estos cambios se propagan y autotest reacciona.

Basado en esto, parece que el cambio de archivo de propagación de eventos es un problema de guardia, no vagrant o virtual box.

No he de mirar en la implementación de las diferencias entre la guardia y autotest aunque.

Ahora sé que es posible coger el archivo de eventos de cambio de host de la máquina virtual. ¿Alguien tiene alguna idea de como lograr esto utilizando la guardia? Me gusta guardia más debido a su DSL y genérico de la usabilidad.

10voto

Gabe Martin-Dempesy Puntos 290

La causa root es que VirtualBox no cascada el archivo de eventos de cambio en el host de la máquina virtual. De la guardia (en Linux) está a la espera de recibir las notificaciones a través de inotify eventos. En su lugar, usted puede tener la guardia encuesta para eventos con guard -p, pero esto puede llevar a la CPU máximo, por lo que puede limitar la votación de la espalda hacia abajo con 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]

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

4voto

Adam Eberlin Puntos 460

Sé que esta es una pregunta más, pero aquí es una respuesta más actualizada:

Protector de -o/--listen-on opción documentación

Pega aquí para referencia 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'

1voto

rdamborsky Puntos 158

Si alguien va en este tema y guardia sigue sin funcionar...

Terminé usando watchr. Es una alternativa para protegerse. Propagación de eventos del host para la máquina huésped funciona ok en watchr. También es más flexible que el autotest.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: