tre*_*mby 2 nfs vagrant laravel grunt-contrib-watch gulp-watch
我们正在尝试Vagrant.我们在主机上通过NFS与guest虚拟机共享一个Web应用程序目录.在开发网站时,我们很快就开始遇到问题.
我们正在运行gulp-watch来查看样式表和javascript文件的更改并运行任务,但是最多一分钟内没有获取更改.
此外,Laravel没有注意到刀片模板正在被更改,因此没有重新编译它们,并且正在显示旧的视图模板.
我最终将问题归结为一个非常简短的PHP脚本来演示错误.
<?php
header('Content-Type: text/plain');
$file = 'test.html';
echo "modified: " . date('r', filemtime($file)) . "\n";
echo "contents: " . file_get_contents($file) . "\n";
Run Code Online (Sandbox Code Playgroud)
这将获得另一个文件的修改时间test.html并输出其内容.这给了奇怪的行为.当test.html通过主机更改(增加其全部内容,单个整数)然后刷新页面时,它将按预期工作(新文件修改日期和新文件内容)或文件的内容将更新但文件修改日期不会.在点击刷新时,修改日期将赶上.这是后一种情况的一个例子.

我后来发现,如果切换"修改"和"内容"行以便在查看修改日期之前检索内容,我每次都会得到预期的输出.
问题是导致这种情况的原因以及我们如何解决这个问题,是否与观察文件变更的问题有关?
他们确实有联系.它似乎与NFS缓存文件的详细信息有关.
随着gulp-watch的运行,我们可以编辑主机正在观看的文件,并且不会被注意到.但是,只要访客访问该文件(例如cat file.less),gulp-watch进程就会看到更新的修改日期并运行其任务.
最后的解决方案是给Vagrant一个提示,用该lookupcache=none选项挂载NFS共享.
要做到这一点,我们Vagrantfile改变了一条线
config.vm.synced_folder "./", "/vagrant", type: "nfs"
Run Code Online (Sandbox Code Playgroud)
至
config.vm.synced_folder "./", "/vagrant", type: "nfs", mount_options: ["lookupcache=none"]
Run Code Online (Sandbox Code Playgroud)
现在立即获取更改.
| 归档时间: |
|
| 查看次数: |
3198 次 |
| 最近记录: |