オープンソースの CMS ツール concrete5 で (主にインストール完了後のログイン時等)、インストール自体に問題はなくても、ページ遷移にとんでもない時間がかかった挙句、
Fatal error: Uncaught exception 'ADODB_Exception' with message 'mysql error: [-32000: Cache write error] in CacheExecute(/path/to/concrete5/files/cache/44/adodb_44fc42cc5a97ebf36998ee03c5f663ed.cache, select ctID from PageTypes)' in /path/to/concrete5/concrete/libraries/3rdparty/adodb/adodb-exceptions.inc.php:78
と言うエラーに遭遇することがある。僕は某案件で使う予定の concrete5.3.3.1 日本語版でテストサイトを構築した際に、上記の不具合が発生した。concrete5 のインストールは何度もやっている上に、今回不具合が発生した同じサーバーでは、既に別の concrete5 が普通に動いている。違いがわからず困惑したが、エラーメッセージを頼りに調べてみると、ここで原因と解決方法が見つかった。
どうも concrete5 のキャッシュ・ディレクトリ /files/cache/ が NFS マウントされた場所にあると、Web サーバーが書き込めるパーミッション設定であっても、具合が悪いらしい。確かに同じサーバー上にある別の concrete5 サイトを始め、今までにインストールしたいくつかの concrete5 は、いずれも NFS とは無縁だった。
以下のように別の場所にキャッシュ・ディレクトリを作成してシンボリック・リンクを張ると、何事もなかったかのように動いた。
・移動 # cd /path/to/concrete5/files/ ・キャッシュ・ディレクトリを削除 # rm -rf cache ・非 NFS な場所にキャッシュ・ディレクトリを作成 # mkdir -p /path/to/noNFS/concrete5/files/cache ・ディレクトリのグループを Apache に変更 # chgrp apache /path/to/noNFS/concrete5/files/cache ・Apache グループが書き込み可能なパーミッションに変更 # chmod 775 /path/to/noNFS/concrete5/files/cache ・シンボリック・リンク作成 # ln -s /path/to/noNFS/concrete5/files/cache
この現象は、例えば Windows 等の作業マシンから読み書きする Samba で構築されたファイル・サーバー上の共有フォルダーを、別の Web サーバーが NFS 経由で参照しているような場合に発生しやすい。これはハマりポイントだ。