VagrantでマウントしたJavascriptファイルが文字化けする問題の対処法
環境
Vagrantで作ったVM内でNginxを走らせ、ホスト側のブラウザからリクエストしている。 アプリのソースファイルはホスト側からVMにマウントしている。
Distributor ID: Ubuntu Description: Ubuntu 12.04 LTS Release: 12.04 Codename: precise
現象
ホスト側でjsを編集しても、正しく反映されない。 UTF-8エンコード周りでよく見る菱型に?のマークに文字化けする。
原因
Nginxが静的ファイルを要求された時にsendfile()というシステムコールを使うが、 それがキャッシュを返す仕組みになっていて、mountしたディレクトリに対してうまく働かないとのこと。
JS and CSS files in vagrant not properly encoded when saved outside of the VM
解決
上記、CSSの記事で紹介されていた方法を試したところ、正確に反映されるようになりました。
/etc/nginx/nginx.conf
sendfile off;
apacheでは試していないが上記ブログによれば以下の設定でいける、らしい。
httpd.conf
EnableSendfile off