CakePHP

CakePHP2.1 ubuntu 11.10 コンソール Permission denied エラー

久しぶりにCakePHPに戻ってきた。早速2.1Betaをubuntu11.10サーバーにインストールして利用を始めた。で、Bakeしようとコマンドを実行したらエラーが発生。

ググって、修正して、エラーが出なくなって使えるようになったけど、モー訳が分からない状態なのでメモしておく事に。

CakePHPをWWWのディレクトリ下「/cake_2_1」に置いた状態で、カレントディレクトリを「cake_2_1」にして以下のコマンドをターミナルで実行する。

$ php lib/Cake/Console/cake.php
  :
Warning Error: SplFileInfo::openFile(.../app/tmp/cache/persistent/myapp_cake_core_file_map) : failed to open stream: Permission denied in .../lib/Cake/Cache/Engine/FileEngine.php on line 297
  :

とエラーが発生した。ググると以下のページで「Config/bootstrap.php」に、下のようにmaskパラメータを追加すると正常に動作するようになった、とあった。

http://cakephp.lighthouseapp.com/projects/42648/tickets/2172#ticket-2172-6

Cache::config('default', array('engine' => 'File', 'mask' => 0666));

そこにもあるように、maskの指定についてドキュメントに記述は見つからないが、取りあえず動くようになった。

特に出力されたファイルの読み書きモードが変わるわけではないようだが、maskパラメータを取り去って元に戻しておいた。それ以降は何事もなく動作する。

と思ったら、アプリケーションの実行で同様のエラーが発生。もう一度maskパラメータを付けて、persistentディレクトリのファイルを一旦削除してアクセスしたらエラーは発生しなかった。

モー訳分からず操作してます (´Д`;)。

追記:
maskパラメータなしだと、myapp_cake_core_file_mapファイルのオーナーグループはログインユーザーで出力され、maskパラメータを追加するとwww-dataで出力された。なので、www-dataにログインユーザーをグループ追加したが、それではエラー回避できなかった。う~ん?

追記2(120329):
app/tmp/logs/error.logへのエラー出力で、 /Cake/Log/Engine/FileLog.php が「file_put_contents()」を使ってエラーメッセージを追加する際、「Permission denied」が表示されメッセージの追加書き込みができないエラーが発生していた。ファイルパーミッションを0666で指定するもダメ。で、logsディレクトリのパーミッションを0764から0774に変更したところ、エラーが発生せずに動作するようになった。