2012-10-08 52 views
32

我在OSX,Ubuntu和Windows 7上運行vagrant,並在主機上使用vim和Netbeans作爲IDE。 VM正在運行CentOS 6.3和Apache 2.2。該docroot設置爲/vagrant保存在虛擬機之外的流浪漢中的JS和CSS文件未正確編碼

當我編輯一個JS或CSS文件並保存它時,瀏覽器會轉過來檢測非法字符。當我在瀏覽器中查看文件時,我看到通常指向編碼問題的鑽石問號字符。我可以在虛擬機內的vim中打開文件,並使用:w ++enc=utf-8進行保存,文件將正常加載。

我已經嘗試了主機和不同主機操作系統上的多個IDE,並且只能指出它與vagrant和安裝的目錄有關。我的IDE不是問題,因爲我可以在本地運行這些文件並且它們可以工作,或者將它們保存到遠程機器上,並且這些文件可以正常工作。只有當我將它們保存到安裝在/vagrant中的內容時,我是否有問題。

它是Apache還是其他操作系統中,我需要更改以使其工作?

+0

發表您的apache響應標題 –

+0

同樣的情況,但與'nginx'作爲網絡服務器和相同的問題,所以我不認爲它與nginx,'dos2unix'也爲我工作 – amd

+0

[Vagrant/VirtualBox/Apache2奇怪的緩存行爲](http://stackoverflow.com/questions/9479117/vagrant-virtualbox-apache2-strange-cache-behaviour) – kenorb

回答

49

今天早上我有這個問題。在你的httpd.conf中設置EnableSendfile關閉。

如果你看看你的httpd.conf,它說:「如果你從NFS掛載的文件系統提供服務,請關閉它。」在http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile中解釋說:「默認情況下,當處理請求時不需要訪問文件中的數據 - 例如,當傳送靜態文件時 - Apache使用sendfile傳送文件內容而不讀取文件if操作系統支持它。「

由於你的Windows主機有一個ntfs文件系統,linux客戶端不能正確地緩存帶有sendfile的文件,所以apache需要發送文件本身。從apache請求文件時,這可能會導致邊際減速,但應該可以忽略不計。

+7

Nginx與OS X作爲主機相同的問題。再次,在nginx.conf中設置'sendfile off';解決了這個問題。 – watermanio

+1

也適合我!雖然請確保,如果您使用的是流浪漢,您是'vagrant reload',所以對'nginx.conf'文件的更改將會更新。 – tmthyjames

+0

@John_McCombs你是我今天的上帝:)。在我的情況下,它是'/ etc/apache2/apache2。conf' – sobi3ch

5

這取決於您使用的服務器。

對於Nginx的:在/etc/nginx/nginx.conf

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

對於阿帕奇:在/etc/httpd/conf/httpd.conf

變化刪除評論爲EnableSendfile off;

而且不要忘記restart Nginx的或Apache。如果它仍然不起作用,exitvagrant reload或類似的東西 - 重新啓動您的虛擬機。