何書こうとしたか忘れた

昨日は「今日この事書こう」みたいなこと決めてたのに忘れてしまった。

忘れてしまったので今日起こったトラブルについてメモしとく
VirtualBoxで開発してるときにローカルに共有フォルダ(shared folders)で開発してるプロジェクトをVM上の公開ディレクトリにシンボリックリンクをはってhttp経由で動作チェックをするみたいなことはよくやると思う。

で、ここで問題が起こるんだけどstaticなファイル(例えばjsやhtml、画像など)を更新しても反映されないということがまれによくある。
原因はNFS(Network File System)でマウントされた共有フォルダ以下のディレクトリをapacheのDocumentRootに設定した場合、カーネルは自身のキャッシュを使ってネットワークからのファイルを 送ることができないことがあることが原因だそうだ。

つまりNFSでマウントされたディレクトリでsendfileを利用しているので、たまにファイルを送ることができなくなって更新以前の静的データを304で送り続けてしまい、結果としてファイルが更新されないという現象が起きるらしい。

ということでhttpd.confやvhosts.confで

EnableSendfile off

と設定すると上手く更新される。

apacheのEnableSendfileについての説明 ( http://httpd.apache.org/docs/2.1/ja/mod/core.html#EnableSendfile )