arn*_*ton 12 linux symfony vagrant assetic docker
我们的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
只需安装它并重新装入您的盒子,即可将通知的内容发送给您的访客计算机:
vagrant plugin install vagrant-notify-forwarder
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3953 次 |
| 最近记录: |