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。如果它仍然不起作用,exit
和 vagrant reload
或类似的东西 - 重新启动你的 VM。
【讨论】:
以上是关于vagrant 中的 JS 和 CSS 文件在 VM 之外保存时未正确编码的主要内容,如果未能解决你的问题,请参考以下文章
IIS 重写规则以将查询字符串添加到 ASP.net 页面中的 .css 和 .js 引用?