久しぶりに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に変更したところ、エラーが発生せずに動作するようになった。