簡體   English   中英

Vagrant,共享文件夾:利用NFS上的inotify

[英]Vagrant, shared folder: take advantage of inotify over NFS

我們的Symfony2 webapp在開發模式下使用Assetic觀察器來重新編譯資產。

webapp在Docker容器中運行,該容器在Vagrant VM(Ubuntu 12.04 Precise)中運行。 主機是OSX 10.9 Mavericks,它通過NFS(v3)共享與VM共享代碼文件夾,代碼通過Docker中的主機/客戶卷安裝在容器中。

由於inotify似乎無法檢測到NFSv3上的文件修改,因此觀察者在輪詢模式下工作,這種模式可能非常慢(檢測到修改的時間約為1/2分鍾)。

我已經讀過NFSv4符合inotify,但我沒有找到任何好的資源。

有沒有辦法讓NFS / inotify一起工作?

不幸的是,inotify 無法在NFS上運行。 inotify通過在內核中的VFS(虛擬文件系統)層中掛鈎來工作。 每當修改發生時,inotify都知道它,因為修改發生在同一台機器上,因此在同一個內核中 - 這使整個事情成為可能。

使用NFS,服務器上會進行修改,並且客戶端需要進行通知。 但是,當進行更改時,NFS不會通知客戶端。 否則,它不會擴展。 NFS的設計(和操作)使單個服務器上有數千個客戶端。 想象一下,如果你做了一個微小的改變,服務器必須把它推送給所有客戶!

當然,您可以說“嘿,NFS協議中應該有一個訂閱機制,以便客戶端可以告訴服務器他們想知道特定位置發生的更改”。 好吧,NFS是30年前設計的,原諒他們不包括這個訂閱/通知系統:-)

我不熟悉Assetic,但也許您可以使用自定義腳本手動監視更改,並在每次檢測到更改時重新編譯資產。 只需遍歷包含資源源的目錄,跟蹤關聯數組中每個文件的mtime,每次檢測到新文件(或新的mtime)時,重新編譯。 繁榮!

另請參閱關於inotify和NFS的其他SO問題

這是一個旨在解決這個問題的插件: https//github.com/mhallin/vagrant-notify-forwarder

只需安裝它並重新加載您的盒子即可將inotify通知轉發給您的客人機器:

vagrant plugin install vagrant-notify-forwarder

您可能對這個名為Guard的工具感興趣,它會監聽在主機操作系統上進行的文件更改,然后在Guest上它會提取並更新這些文件。 這對我有用,現在我的資產幾乎瞬間更新。

https://serverfault.com/questions/453826/vagrant-shared-folder-and-file-change-events

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM