オープンソースの 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 経由で参照しているような場合に発生しやすい。これはハマりポイントだ。

Comments are closed.