メインコンテンツへスキップ

Laravelのキャッシュクリアに失敗した場合の対処法

はじめに

🛠 BookStackがHTTP 500を返してリブートしないと復旧しないときの対処法 でLaravelのキャッシュで失敗したので対処法を残します。

⚠️ 現象

php artisan cache:clear

を行ったところ、下記のエラーで失敗する

ERROR  Failed to clear cache. Make sure you have the appropriate permissions.

これは php artisan cache:clear のときに、書き込み権限が不足しているために失敗したという意味です。

このエラーはLaravelの定番トラブルのひとつで、storage ディレクトリの中のキャッシュファイルやログを www-data が触れないとコケるようになっています。


🛠 対処法:storage および bootstrap/cache のパーミッション修正

以下の2つのディレクトリに www-data(Apacheのユーザー)が書き込める必要があります。

sudo chown -R www-data:www-data /var/www/BookStack/storage /var/www/BookStack/bootstrap/cache
sudo chmod -R 775 /var/www/BookStack/storage /var/www/BookStack/bootstrap/cache

そのあともう一度キャッシュ削除を試してみてください:

php artisan cache:clear

これでも同じエラーで解決できない場合

同じエラーが php artisan cache:clear で繰り返し出るということは、パーミッションの修正が反映されていない or PHPプロセス側にキャッシュされた不正状態が残っている可能性が高いです。


✅ 手順:徹底リセット

① 所有権と権限を再確認(sudo付きで強制)
sudo chown -R www-data:www-data /var/www/BookStack/storage /var/www/BookStack/bootstrap/cache
sudo chmod -R 775 /var/www/BookStack/storage /var/www/BookStack/bootstrap/cache

念のため sudo をつけ直しています。前に sudo -u www-data などで入っていた場合、意図せず所有者が変わっている可能性もあります。


② PHP-FPM を使っているかどうか確認(Ubuntu 22.04 + PHP 8.2ならたぶん使ってる)

ps aux | grep php-fpm

いたら以下で再起動:

sudo systemctl restart php8.2-fpm

いなければApache再起動だけでOK:

sudo systemctl restart apache2

③ artisan コマンドを www-data ユーザーで実行(これが効く!)

sudo -u www-data php artisan cache:clear

これで失敗しなくなれば完璧です!


🔚 それでもダメな場合

以下を試すか、リブートでも構いません:

sudo reboot

何度も出るようであれば、BookStackやLaravelの内部でキャッシュ階層に何か壊れたファイルが残っている可能性もあります。その場合は、キャッシュディレクトリごと手動で削除する荒業もあります。


✅ 結論(まとめ)

ステップ 内容
① 所有権と権限の再修正 storagebootstrap/cachewww-data 書き込み許可
② PHP-FPM or Apacheの再起動 不正キャッシュをプロセスごと初期化
sudo -u www-data でartisan実行 実行ユーザー権限に一致させて失敗を防止
④ それでもだめなら リブートOK。最終手段としてあり