我们正在尝试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";
这将获取另一个文件test.html
的修改时间并输出其内容。这给了奇怪的行为。当通过主机更改test.html
(递增其全部内容,单个整数)然后刷新页面时,它将按预期工作(新文件修改日期和新文件内容)或文件内容会更新,但文件修改日期不会。在点击刷新时,修改日期将赶上。这是后一种情况的一个例子。
我后来发现,如果&#34;修改了&#34;和&#34;内容&#34;切换线以便在查看修改日期之前检索内容,我每次都会得到预期的输出。
问题是导致这种情况的原因以及我们如何解决这个问题,是否与观察文件变更的问题有关?
答案 0 :(得分:6)
他们确实有联系。它似乎与NFS缓存文件的详细信息有关。
在gulp-watch运行的情况下,我们可以编辑主机正在观看的文件,并且不会被注意到。但是,只要访客访问该文件(例如使用cat file.less
),gulp-watch进程就会看到更新的修改日期并运行其任务。
最终的解决方案是让Vagrant提示使用lookupcache=none
选项挂载NFS共享。
为此,Vagrantfile
中的一行已从
config.vm.synced_folder "./", "/vagrant", type: "nfs"
到
config.vm.synced_folder "./", "/vagrant", type: "nfs", mount_options: ["lookupcache=none"]
现在立即收到更改。