Чарівні події, пов’язані із зміною папок та файлів


15

У мене є віртуальна машина ubuntu, до якої я отримую доступ через Vagrant. У моєму хості (Mac OSX) є папка з парою файлів, якими я поділяюсь до віртуальної машини. У цій віртуальній машині я хочу використовувати охорону, щоб спостерігати за змінами файлів і виконувати якусь дію, якщо якийсь із цих файлів зміниться.

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

Ось так виглядає моя бродяча спільна папка (досить звичайні речі)

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

Я навіть спробував використовувати обмін NFS ( :nfs => true), але це не допомогло.

Чи є спосіб змусити події зміни файлів поширюватися з хоста на віртуальну машину? Або це щось із бродячого / VirtualBox характеру?

ОНОВЛЕННЯ:

Після ще декількох випробувань я встановив дорогоцінний камінь ZenTest , який містить інструмент автоматичного тестування , що дозволяє подібні функції щодо подій зміни файлів.

Під час запуску автоматичного тестування у віртуальній машині та зміни файлів з моєї хост-машини ці зміни розповсюджуються та автоматично тестується .

Виходячи з цього, здається, що розповсюдження події зміни файлів є проблемою охорони, а не бродячого чи віртуального поля.

Я не вивчав різниці в застосуванні між охороною та автотестом.

Тепер я знаю, що можна захопити події зміни файлів від хоста у віртуальній машині. Хтось має ідею, як цього досягти за допомогою охорони? Мені більше подобається охорона через його DSL та загальну зручність використання.

Відповіді:


11

Першопричиною є те, що VirtualBox не каскадує події зміни файлів на хості до VM. Guard (в Linux) очікує отримання сповіщень через ініціативні події. Натомість у вас може бути опитування охоронців для подій 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


Дякую, Гейб, я залишив охорону для сторожа деякий час тому. Тим не менш, ваша відповідь цінна для розуміння.
рдамборський

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

Якщо хтось зіткнеться з цим питанням і охорона все ще не працює ...

Я в кінцевому підсумку використовував вахту . Це альтернатива охороні. Поширення подій від господаря до гостьової машини працює нормально. Він також гнучкіший, ніж автотест.


Events propagation from host to guest machine works ok in watchr.Як? Чи використовується опитування? Якщо VirtualBox не поширює події, то як він може знати, коли файл змінився?
Nateowami
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.