Vagrant共有フォルダーおよびファイル変更イベント


14

Vagrant経由でアクセスしているUbuntu仮想マシンがあります。私のホスト(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

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がイベントを伝播していない場合、ファイルがいつ変更されたかをどのように知ることができますか?
なとわみ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.