2014-01-17 42 views
11

我們的Symfony2 web應用程序在開發模式下使用Assetic觀察器在旅途中重新編譯資產。流浪,共享文件夾:充分利用NFS上的inotify優勢

該web應用程序運行,其中在流浪VM(Ubuntu的12.04精確)運行的泊塢容器。 主機是OSX 10.9 Mavericks,它通過NFS(v3)共享與VM共享代碼文件夾,代碼通過Docker中的主機/來賓卷安裝在容器中。

由於inotify的似乎不能夠NFSv3相比檢測文件的修改,在輪詢模式中的觀察者作品可以是非常緩慢(〜1/2分鐘,以檢測所述修改)。

我讀過的NFSv4是inotify的兼容,但我沒有發現任何良好的ressource。

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

回答

7

不幸的是,inotify的可以對NFS不工作。 inotify通過將自己掛在內核中的VFS(虛擬文件系統)層上工作。每當修改發生,inotify就知道它,因爲修改發生在同一臺機器上,因此在同一個內核中 - 這使得整個事情成爲可能。

使用NFS時,服務器上會發生修改,並且客戶端上會收到通知。但是,NFS在更改時不會通知客戶端。否則,它不會擴展。 NFS已經設計(並運行)在單臺服務器上擁有數千個客戶端。想象一下,如果你做了一個小改動,服務器必須把它推送給所有的客戶端!

當然,你可以說:「嘿,應該在NFS協議的訂閱機制,讓客戶可以告訴他們想知道的變化在特定位置發生的服務器」。那麼,NFS是30年前設計的,所以原諒他們不包括這個訂閱/通知系統:-)

我不熟悉Assetic,但也許你可以有一個自定義腳本來手動觀察變化,並且每次檢測到更改時重新編譯資產。只需遍歷包含資源來源的目錄,跟蹤關聯數組中每個文件的mtime,並且每次檢測到新文件(或新的mtime)時,都要重新編譯。繁榮!請參閱this other SO question about inotify and NFS

+0

謝謝您詳細的答案。我們已經有一個使用Assetic的投票腳本,在我最初的問題中,我提到它是一個「觀察者」,但實際上它非常慢(檢測更改大約需要1/2分鐘)。 –

相關問題