CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
2024/09/08
CakePHP4の cake cache clear_allで Permission deniedのエラーの時は cakeにパーミッションが不足している可能性大
パーミッション不足はキャッシュファイルではなくcakeコマンドの方
CakePHP4でキャッシュをクリアする「cake cache clear_all」コマンドを実行したとき、「-bash: bin/cake: Permission denied」のエラーが出るときは、「cake」にパーミッションが与えられていないために発生します。
このエラーが出たとき、コマンドを実行して削除するキャッシュファイルの方にパーミッションが正しく設定されていないのかと思っていましたが、そうではなく、「/bin/cake」のコマンドプログラムの方にパーミッションが足りていない状況でした。
「/bin/cake」に実行権限を付与する
というわけで、原因が分かれば対応は簡単です。
下記コマンドを実行して、「/bin/cake」に実行権限を付与します。
1 |
sudo chmod 744 ./bin/cake |
「cake」ファイルまでのパスや、「744」で指定しているパーミッションは、環境に応じて変更してください。
「744」のパーミッションは、ユーザのグループ設定の影響もありますので、「754」にする必要がある場合もあるかもしれません。
ちなみに、「cake cache clear_all」コマンドについては下記に記事を書いていますので、併せて参照してください。
「CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う」
「/bin/cake」に実行権限が付与されない理由の一つ
何で「/bin/cake」に実行権限が付与されないのだろうか、と悩んでいました。
これまでそんな不具合なかったのになぁ、と。
この記事を読んでいる方、XAMPP環境で開発を行っていませんか?
そして、Linux系の本番環境にプログラムを移動させてからこの不具合が発生していませんか?
私は XAMPP環境で構築したプログラムを、そのまま Linux環境にアップロードしました。
そしたら、そこで発生するようになりました。
最初に、Linux環境で構築した CakePHPの「/bin/cake」には実行権限が付与されていたのではないか、と思います。
そこに、Windows上に構築した XAMPP環境で構築した CakePHPを Gitを経由して上書きしたのですが、Windows環境の「/bin/cake」には実行権限という概念がなく、一般的なファイルとしてそのまま上書きされたのだろうと思います。
そのため、「cakeコマンド」を実行しようとしたところ権限がないですよ、というエラーになったのだと考えています。
キャッシュファイルのパーミッションを設定する
前項で「/bin/cake」コマンドのキャッシュ設定について説明しましたが、それだけでは記事が短いので、キャッシュファイルのパーミッションを設定する方法も解説します。
CakePHP4のキャッシュファイルの設定は「/config/app.php」ファイルに記述されています。
バージョンなどによって多少違うと思いますが、97行目辺りに「'Cache' => [
」という記述があるかと思います。
この辺りからキャッシュについての設定が記述されています。
これに対して、8行目の「'mask' => 0664,
」を追記します。
1 2 3 4 5 6 7 8 9 |
'_cake_core_' => [ 'className' => FileEngine::class, 'prefix' => 'myapp_cake_core_', 'path' => CACHE . 'persistent' . DS, 'serialize' => true, 'duration' => '+1 years', 'url' => env('CACHE_CAKECORE_URL', null), 'mask' => 0664, ], |
上記は「_cake_core_」のキャッシュについての設定になりますが、同様の対応を「_cake_model_」「_cake_routes_」の設定情報にも追記します。
場合によっては 7行目の最後に「,
(カンマ)」がない場合もあるかもしれませんので、ない場合はカンマも追記してください。
また、上記の設定では、キャッシュファイルのパーミッションを「664」にする設定にしていますが、環境によっては「666」の方がいい場合もあると思います。
今回の解説は、キャッシュについてでしたが、ログの出力方法、および、ログファイルのパーミッションなどの設定方法もキャッシュとよく似ています。
ログについては下記にまとめていますので、併せて参考にしてください。
「CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説」
CakePHP4の関連記事
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。
-
-
cakephp3 カスタムバリデーションを簡易的に実装する方法
CakePHP3の独自のバリデーションをテーブルクラス内に簡単に記述する方法を解説。他のテーブルクラスでは使えないが、記述する量は少なく実装できるため、他で使わない処理を書くのには便利。
-
-
Windows環境の XAMPPを利用して CakePHPの開発する際の注意点
WindowsベースにXAMPPで環境を構築しCakePHP4を利用したWebシステムを構築する際は、大文字と小文字の違いを意識する必要がある。LinuxベースのWebサーバに移動させたときに不具合で動作しないこともある。
-
-
CakePHP 2.3 ログイン、操作履歴、アクセスログ出力
CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。
-
-
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4のシステムから他のシステムのデータベースにアクセスをし、SQL文を実行する方法を解説。try-catchでエラーを取得する方法も解説。
-
-
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。
-
-
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。
-
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
-
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHPのユーザ認証に使用するオフィシャルなプラグインAuthenticationだが、CakePHP5系では Authentication Ver.3系を使う必要があるが、公式ChiffonBookが間違えている。