Apache 不提供由 gulpjs 更新的文件的更改

Apache 不提供由 gulpjs 更新的文件的更改

我有一个 CentOS 6.5 VM,使用 Apache HTTPD 2.2 作为 Web 服务器,并且我在构建过程中使用 GulpJS。当我更新 CSS 文件时,GulpJS 构建过程运行正常,如果我查看 VM 上的文件,我可以看到更新,但是当通过 Apache HTTPD 提供服务时,文件中没有更改。如果我使用 vi 编辑文件,不做任何更改并再次保存,Apache HTTPD 就会获取更改并输出正确的文件。

我已经禁用 mod_cache 模块(例如,注释掉它的 LoadModule 指令),因为我认为这可能是原因,但这并没有什么区别。

还有其他人遇到过这个问题并知道如何解决吗?

[更新] - 刚刚查看了 httpd 访问日志,我可以看到该文件每次都由 httpd 提供服务,无论是更新之前还是更新之后,但都没有任何变化:

192.168.56.1 - - [22/Jun/2014:09:27:42 +0100] "GET /includes/min/stylesheet.min.css HTTP/1.1" 200 135882 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
192.168.56.1 - - [22/Jun/2014:09:29:22 +0100] "GET /includes/min/stylesheet.min.css HTTP/1.1" 200 135878 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"

除了文件长度。这表明 httpd 看到了文件更新,但浏览器中没有更新。我尝试了几种不同的浏览器,清除了浏览器缓存等。但直到我使用 vi 在服务器上编辑文件并再次保存,浏览器才会加载新版本的文件,这让我再次想到 httpd 仍然提供错误版本的文件。真奇怪。

[更新 2] - 我相信这可能与 VirtualBox 和共享文件夹有关。该站点的文件位于主机 (Mac OS X 10.9.3) 上,并使用 NodeJS 在那里编译。它们被编译到一个文件夹中,该文件夹使用 VBox 的共享文件夹与客户操作系统 (CentOS) 共享。如果我通过控制台查看目录中的文件,我会看到:

-rwxrwxrwx. 1 root root 135881 Jun 23  2014 stylesheet.min.css

如您所见,文件中没有正常的月、日和时间,而是月、日和年。这对我来说看起来不合适,但我不知道这意味着什么,也不知道这是否重要。

答案1

找到解决方案了。这是 Apache HTTPD 缓存问题。我重新放入了 mod_cache 和 mod_disk_cache 模块,然后设置了以下指令:

缓存禁用 /

这解决了问题。不知道为什么简单地不加载缓存模块没有达到同样的效果。

更新:虽然这似乎解决了一段时间的问题,但似乎并不是真正的解决方案。问题实际上与在 VirtualBox 上运行的机器以及它所服务的文件有关,这些文件位于主机上并通过使用 vboxsf 安装到客户机上。以下博客文章解释了问题和解决方案:

http://www.frandieguez.com/blog/2013/05/solving-caching-issues-with-vagrant-on-vboxsf/

相关内容