Назад | Перейти на главную страницу

Бродячая общая папка и события изменения файла

У меня есть виртуальная машина ubuntu, к которой я обращаюсь через Vagrant. На моем хосте (Mac OSX) есть папка с парой файлов, которыми я делюсь с виртуальной машиной. На этой виртуальной машине я хочу использовать охранять для отслеживания изменений файлов и выполнения некоторых действий, если какой-либо из этих файлов изменяется.

Я правильно настроил охрану, и при изменении общего файла из виртуальной машины он работает нормально и запускает соответствующие сценарии. Но если я попытаюсь изменить общий файл с моей хост-машины, это событие изменения файла не будет распространяться, и охрана не отреагирует.

Так выглядит моя бродячая общая папка (довольно обычное дело)

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

Я даже пробовал использовать совместное использование NFS (:nfs => true), но это не помогло.

Есть ли способ заставить события изменения файла распространяться с хоста на виртуальную машину? Или это что-то вроде Vagrant / VirtualBox?

ОБНОВИТЬ:

После еще нескольких попыток я установил ZenTest gem, который содержит инструмент автотеста, позволяющий аналогичную функциональность в отношении событий изменения файлов.

При запуске автотеста на виртуальной машине и изменении файлов с моей хост-машины эти изменения распространяются и автотест реагирует.

Исходя из этого, кажется, что распространение события изменения файла - это проблема охраны, а не бродяги или виртуального ящика.

Однако я не рассматривал различия в реализации между защитой и автотестом.

Теперь я знаю, что можно отслеживать события изменения файла с хоста на виртуальной машине. Кто-нибудь знает, как добиться этого с помощью гвардии? Мне больше нравится guard из-за его DSL и общего удобства использования.

Основная причина в том, что VirtualBox не передает события изменения файла на хосте на виртуальную машину. Guard (в Linux) ожидает получать уведомления через события inotify. Вместо этого у вас может быть охранный опрос для событий с guard -p, но это может привести к максимальной загрузке процессора, поэтому вы можете уменьшить скорость опроса с помощью 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

Я знаю, что это более старый вопрос, но вот более свежий ответ:

Охранник -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'

Если кто-то столкнется с этой проблемой и охрана все еще не работает ...

В итоге я использовал сторож. Это альтернатива охраннику. Распространение событий от хоста к гостевой машине работает нормально в watchr. Кроме того, он более гибкий, чем автотест.