vagrant 中的 JS 和 CSS 文件在 VM 之外保存时未正确编码

Posted

技术标签:

【中文标题】vagrant 中的 JS 和 CSS 文件在 VM 之外保存时未正确编码【英文标题】:JS and CSS files in vagrant not properly encoded when saved outside of the VM 【发布时间】:2012-09-28 18:37:12 【问题描述】:

我在 OSX、Ubuntu 和 Windows 7 上运行 vagrant,并在主机上使用 vim 和 Netbeans 作为 IDE。虚拟机运行 CentOS 6.3 和 Apache 2.2。 docroot 设置为/vagrant

当我编辑一个 JS 或 CSS 文件并保存它时,浏览器会转过身来检测非法字符。当我在浏览器中查看文件时,我看到菱形问号字符,这通常表示编码问题。我可以在虚拟机内的vim中打开文件并用:w ++enc=utf-8保存,文件将正常加载。

我已经在主机和不同的主机操作系统上尝试了多个 IDE,并且只能将其与 vagrant 和挂载目录有关。我的 IDE 不是问题,因为我可以在本地运行文件并且它们可以工作,或者将它们保存到远程机器并且文件可以工作。只有当我将它们保存到安装在/vagrant 中时,我才会遇到问题。

我需要更改 Apache 还是操作系统中的其他东西才能使其正常工作?

【问题讨论】:

发布您的 apache 响应标头 同样的情况,但 nginx 作为 Web 服务器并遇到同样的问题,所以我认为它与 nginx 无关,dos2unix 也适用于我 Vagrant/VirtualBox/Apache2 Strange Cache Behaviour的可能重复 【参考方案1】:

今天早上我遇到了这个问题。在 httpd.conf 中将 EnableSendfile 设置为关闭。

如果您查看您的 httpd.conf,它会显示“如果您从 NFS 挂载的文件系统提供服务,请关闭它”。在http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile 中解释说:“默认情况下,当处理请求不需要访问文件中的数据时——例如,当交付静态文件时——Apache 使用 sendfile 来交付文件内容而无需读取如果操作系统支持文件。"

由于您的 windows 主机有一个 ntfs 文件系统,linux 来宾无法使用 sendfile 正确缓存文件,因此 apache 需要自己发送文件。当从 apache 请求文件时,这可能会导致轻微的减速,但应该可以忽略不计。

【讨论】:

以 OS X 作为主机的 Nginx 上的相同问题。同样,在 nginx.conf 中设置 sendfile off; 修复了这个问题。 也为我工作!尽管请确保,如果您使用的是 vagrant,那么您 vagrant reload 会更新 nginx.conf 文件的更改。 @John_McCombs 今天你是我的上帝 :)。就我而言,它是/etc/apache2/apache2.conf 在容器内运行的 OS X 主机、boot2docker、Docker 和 Apache 上遇到此问题。 EnableSendfile off 也解决了那里的问题。 非常感谢。【参考方案2】:

这取决于您使用的服务器。

对于Nginx:在/etc/nginx/nginx.conf

将包含sendfile on; 的行更改为sendfile off;

对于 Apache:在/etc/httpd/conf/httpd.conf

更改删除EnableSendfile off; 的评论

并且不要忘记restart您的 Nginx 或 Apache。如果它仍然不起作用,exitvagrant reload 或类似的东西 - 重新启动你的 VM。

【讨论】:

以上是关于vagrant 中的 JS 和 CSS 文件在 VM 之外保存时未正确编码的主要内容,如果未能解决你的问题,请参考以下文章

如何利用Vue.js库中的v-html指令添加html元素

如何利用Vue.js库中的v-html指令添加html元素

Vagrant 共享文件夹适用于工作目录,但仅此而已

IIS 重写规则以将查询字符串添加到 ASP.net 页面中的 .css 和 .js 引用?

加快 Vagrant 上主机和来宾之间的同步延迟(NFS 同步文件夹)

Vagrant -v忽略ffi -nokogiri和unf_ext,因为它的扩展名没有构建