作業環境
ホスト
- OS … Windows 7 64bit
- 開発環境 … Eclipse 3.7.2
ゲスト
- OS … CentOS 6.0
- Httpd … Apache 2.2.15
起きた問題
ちょっと解りにくいので作業順に従って箇条書きで書くとこんな感じ。- Eclipseのワークスペースを共有フォルダとしてVirtualBoxに登録
- 共有フォルダをマウントしてドキュメントルートにシンボリックリンクを貼る
- Eclipseでファイルを更新
- ゲストOS上でファイルの内容が更新されていることを確認
- ブラウザの表示を更新→更新されない
- 読み込むjsファイルやcssファイルを変更しても反映されない
- JavaScriptの場合途中までしか読み込まれずにエラーが出る
- ExtJS4ではファイルの末尾によく解らない文字列が追加され「illegal character」エラーが出る
解決方法
こちらを参考にしました。#tipshare-view4blog-body{margin:0;font-family:”Helvetica Neue”,Helvetica,Arial,sans-serif;color:#404040;}#tipshare-view4blog-body{background: url(https://tipshare.info/img/ninjal-log-bg.png) no-repeat right bottom;background-color: whiteSmoke;border: 1px solid #DDD;padding: 13px;box-shadow: 0 1px 2px rgba(0,0,0,.1);}#tipshare-view4blog-body h2{overflow:hidden;font-weight:bold;font-size:24px;line-height:36px;}#tipshare-view4blog-body .site-title{text-align:right;}#tipshare-view4blog-body a.site-title{padding-left:40px;}#tipshare-view4blog-body a.inside{text-decoration: none;margin:-4px 3px 0 3px}#tipshare-view4blog-body a.site-title ,#tipshare-view4blog-body a.post-view-title ,#tipshare-view4blog-body a.post-user {text-decoration: none; color: #333;}#tipshare-view4blog-body a.site-title:hover ,#tipshare-view4blog-body a.post-view-title:hover ,#tipshare-view4blog-body a.post-user:hover {color: #f00;}#tipshare-view4blog-body .post-box-action {height: 20px;margin: 10px 3px 3px 3px;padding: 16px 10px 5px 10px;color: #999;background-color: white;border-radius: 6px;border: 1px solid #EEE;-webkit-box-shadow: 0 1px 1px rgba(0,0,0,.2) inset;-moz-box-shadow: 0 1px 1px rgba(0,0,0,.2) inset;box-shadow: 1px 1px 0.4px rgba(0,0,0,.2) inset;}#tipshare-view4blog-body .post-body {margin: 0;padding: 0 0 1em;}#tipshare-view4blog-body .post-title {margin: 5px;}#tipshare-view4blog-body .post-body h1 {font-size: 24px;line-height: 24px;}#tipshare-view4blog-body .post-user {float: left;margin-right: 2px;}#tipshare-view4blog-body .post-date {font-size: 12px;margin: 1px 2px 0 0;padding-left: 18px;margin: 0 4px -6px 0;background: url(https://tipshare.info/img/fam/calendar_view_day.png) no-repeat center left;color: #999;float: left;}img.current-user-image, img.editor-image {float: left; width: 24px; height: 24px; margin: -6px 4px -6px 0; vertical-align: baseline; }img.icon-mini { float: left; margin: 0 4px -6px 0; vertical-align: baseline; }#tipshare-view4blog-body .post-body-main { background-color: rgba(255,255,255, 0.6); padding: 10px; margin: 3px; line-height: 1.3; border-radius: 6px 6px 0 0; }#tipshare-view4blog-body img.editor-image{width: 24px;height: 24px;margin: -8px 4px -6px 0;vertical-align: baseline;}
上記サービスが終了したときに備えて抜き書きしてまとめると、こんな感じ。
httpd.confの適当な ディレクティブ(例えばドキュメントルート)に以下の記述を追加する
- EnableMMAP Off
- EnableSendfile Off
原因は、
Apacheの静的ファイルをメモリ上にキャッシュする機能が原因のよう。
通常、キャッシュされたファイルが更新された場合、更新を検知して再読み込みを行うはずですが、
NFS、SMBなどの外部ストレージ上のファイルの場合正しく更新を検知できないようです。
(Virtualboxの共有フォルダはApacheからはNFSのように見えるみたい)
あーなるほど…そんなことが。
原因が切り分けられずに、キャッシュを削除したり、Apacheのモジュールをチェックしたりいろいろ試して上手くいかなくて嵌まってたんですが(アプローチは間違ってなかったけど、自分では上みたいなことは一生解らなかったと思う)、こちらを発見できたときに拳を握りしめました。本当に助かりました。ありがとうございます。
というわけで、拡散するんだぜ。