2014-01-17 6 views
11

私たちのSymfony2 Webアプリケーションは、開発モードでAsseticウォッチャーを使用して、外出先で資産を再コンパイルします。迷惑メール、共有フォルダ:NFS経由でinotifyを活用

webappは、Vagrant VM(Ubuntu 12.04 Precise)で動作するDockerコンテナで動作します。 ホストはOSX 10.9 Mavericksであり、NFS(v3)共有を介してVMとコードフォルダを共有し、コードはDockerのホスト/ゲストボリュームを介してコンテナにマウントされます。

NFSv3でファイルの変更を検出できないように見えるので、ウォッチャーはポーリングモードで動作します。これは非常に遅い(変更を検知するのに約1/2分)。

私は、NFSv4がinotifyに準拠していると読んだことがありましたが、その上で良いリソースは見つかりませんでした。

NFS/inotifyを連携させる方法はありますか?

答えて

7

残念ながら、inotify NFSで動作できません。 inotifyは、カーネル内のVFS(仮想ファイルシステム)層に自身をフックすることで動作します。変更が起こるたびに、変更は同じマシン、つまり同じカーネル内で発生するため、inotifyはそのことを知っています。これにより、すべてのことが可能になります。

NFSでは、サーバー上で変更が行われ、クライアントでの通知が必要になります。しかし、NFSは、変更が行われたときにクライアントに通知しません。さもなければ、それは拡大縮小しません。 NFSは、1台のサーバー上に何千ものクライアントを持つように設計(および運用)されています。あなたが小さな変更を行い、サーバーがすべてのクライアントにそれをプッシュしなければならないと想像してください!

言うまでもなく、「ねえ、NFSプロトコルにサブスクリプション機構がなければならないので、クライアントは特定の場所で起こった変更について知りたいとサーバーに伝えることができます。さて、NFSは30年前に設計されているので、この定期購読/通知システムを含まないことを許してください:-)

私はAsseticに精通していませんが、手動で変更を監視するカスタムスクリプトを持つことができます。変更を検出するたびに資産を再コンパイルします。アセットのソースを含むディレクトリを調べ、連想配列の各ファイルのmtimeを追跡し、新しいファイル(または新しいmtime)を検出するたびに再コンパイルしてください。ブーム!

this other SO question about inotify and NFSも参照してください。

+0

感謝:ちょうどあなたのゲストマシンに転送inotifyの通知を持って、それをインストールしてボックスをリロードhttps://github.com/mhallin/vagrant-notify-forwarder

を詳細な答え。私たちはすでにAsseticのポーリングスクリプトを持っています。最初の質問で "ウォッチャー"と言いましたが、実際は非常に遅いです(変化を検出するのに1/2分です)。 –

3

この解決を目指しプラグインです:あなたのための

vagrant plugin install vagrant-notify-forwarder 
関連する問題