VagrantでGrunt watchした内容が反映されない場合の対処法


以前に、ツイッターでメモしてたものが、時が流れて探しにくくなったので、改めてブログにメモしておきます。

ホスト側でwatchしてても、ゲスト側に更新が反映されない問題

Gruntfileに、Compassのコンパイルを定義していて、watchを実行し、SCSSの変更を常時監視していました。そんな中で、この問題に出くわしました。

ことの経緯

原因と対処法

詳しくは、リンク先を見ていただくとして、なぜこのようなことが起きるかというと、

静的なファイルのようにリクエストの処理にデータのアクセスを必要としないときには、ファイルを読み込むことなくカーネルの sendfile を使って、ファイルを送るようになっているから

です。

Apacheの場合は、 EnableSendfile offを、Nginxの場合は、 sendfile off;を設定ファイルに追記すれば、これらの問題は解消されます。
ホスト側では、CSSは正常に作られているので、問題に気付きにくいというのが、ハマるポイントですね。

VagrantでCSSの更新が反映されない場合の対処法 – Qiita
vagrantのsynced_folderをapacheで利用しているときのキャッシュ回避 – じゅにゃくんのはてブロ。

環境

環境は以下の通りです。

ソフトウェアバージョン
Vagrant1.3.5
(ホスト) MacOS10.8.5
(ゲスト) CentOS6.5

以上です。