gpt4 book ai didi

laravel - 在 Vagrant 上监视文件的更改,文件修改时间未更新

转载 作者:行者123 更新时间:2023-12-02 18:23:02 26 4
gpt4 key购买 nike

我们正在尝试 Vagrant。我们在主机上有一个通过 NFS 与 guest 共享的 Web 应用程序目录。在开发网站时,我们很快就开始遇到问题。

我们正在运行 gulp-watch 来发现样式表和 javascript 文件的更改并运行任务,但更改在长达一分钟的时间内没有被拾取。

此外,Laravel 没有注意到 Blade 模板正在更改,因此没有重新编译它们,并且显示了旧的 View 模板。

我最终将问题归结为一个非常短的 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(增加其完整内容,单个整数)然后刷新页面时,它要么按预期工作(新文件修改日期和新文件内容),要么文件内容将更新,但文件修改日期不会更新。点击刷新后,修改日期就会 catch 。这是后一种情况的示例。

Demonstration

我后来发现,如果“修改”和“内容”行互换,以便在查看修改日期之前检索内容,我每次都会得到预期的输出。

问题是导致此问题的原因以及我们如何解决它,以及它是否与监视文件更改的问题有关?

最佳答案

它们确实是有联系的。它似乎与 NFS 缓存有关文件的详细信息有关。

运行 gulp-watch 后,我们可以从主机编辑一个被 guest 观看的文件,并且不会被注意到。但是,一旦 guest 访问该文件(例如使用 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"]

现在,更改会立即生效。

关于laravel - 在 Vagrant 上监视文件的更改,文件修改时间未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28571326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com