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の内部でキャッシュ階層に何か壊れたファイルが残っている可能性もあります。その場合は、キャッシュディレクトリごと手動で削除する荒業もあります。
✅ 結論(まとめ)
ステップ | 内容 |
---|---|
① 所有権と権限の再修正 | storage と bootstrap/cache に www-data 書き込み許可 |
② PHP-FPM or Apacheの再起動 | 不正キャッシュをプロセスごと初期化 |
③ sudo -u www-data でartisan実行 |
実行ユーザー権限に一致させて失敗を防止 |
④ それでもだめなら | リブートOK。最終手段としてあり |