VagrantでGrunt watchした内容が反映されない場合の対処法
以前に、ツイッターでメモしてたものが、時が流れて探しにくくなったので、改めてブログにメモしておきます。
ホスト側でwatchしてても、ゲスト側に更新が反映されない問題
Gruntfileに、Compassのコンパイルを定義していて、watchを実行し、SCSSの変更を常時監視していました。そんな中で、この問題に出くわしました。
ことの経緯
ひょっとして、VagrantとGruntって相性悪い?
ホスト側でGrunt watchしてても、ゲスト側ではうまく更新が反映されてない。
— まわたりなおと (@mawatarin) 2013, 12月 23
お酒飲みながらだから、自分がバグってんだろうって思ってたけど、この二つの相性に原因がありそうだぞ。
— まわたりなおと (@mawatarin) 2013, 12月 23
ググっても、それらしきものが出てこない…。誰か、同様のトラブルを経験した人はいないものか。
— まわたりなおと (@mawatarin) 2013, 12月 23
んー?Vagrantというよりか、Vagrant上のApacheと言った方が正確か?
— まわたりなおと (@mawatarin) 2013, 12月 23
おー!読みがあたった。やっぱりVagrant上のApacheが原因だ。結構飲んでるけど、冴えてるな。
EnableSendfile Off に設定すれば、いけた。
http://t.co/5L01nwK4nC
— まわたりなおと (@mawatarin) 2013, 12月 23
原因と対処法
詳しくは、リンク先を見ていただくとして、なぜこのようなことが起きるかというと、
静的なファイルのようにリクエストの処理にデータのアクセスを必要としないときには、ファイルを読み込むことなくカーネルの sendfile を使って、ファイルを送るようになっているから
です。
Apacheの場合は、 EnableSendfile offを、Nginxの場合は、 sendfile off;を設定ファイルに追記すれば、これらの問題は解消されます。
ホスト側では、CSSは正常に作られているので、問題に気付きにくいというのが、ハマるポイントですね。
VagrantでCSSの更新が反映されない場合の対処法 – Qiita
vagrantのsynced_folderをapacheで利用しているときのキャッシュ回避 – じゅにゃくんのはてブロ。
環境
環境は以下の通りです。
ソフトウェア | バージョン |
---|---|
Vagrant | 1.3.5 |
(ホスト) MacOS | 10.8.5 |
(ゲスト) CentOS | 6.5 |
以上です。