💥
Laravel Sailで作った開発環境でchmod(): Operation not permitted が発生したら
概要
Laravel SailでLaravelの開発環境を作成し、ローカルサーバーを動かしながらコーディングしていたところ、以下のエラーが発生しました。
(開発環境作成直後は問題なく動いてました)
chmod(): Operation not permitted
この場合の対策についてまとめます。
発生した環境
- Windows 10
- WSL2 + Ubuntu 20.04 LTS
- PHP 8.0.11
- Laravel 8.62.0
各種コマンド実行にはWindows Terminalを使用。
調査
エラーが発生したコードを追ってみると、
\vendor\laravel\framework\src\Illuminate\Filesystem\Filesystem.php
のreplaceメソッド内でchmodコマンドを実行した際に起きたものである事が判明。
何のファイルに対してコマンドを実行しようとしたのか調べてみると、
/var/www/html/bootstrap/cache/services.phpaHBizr
とあった。このファイルに対してchmodコマンドを実行する権限が無いようです。
phpを実行しているコンテナ内のキャッシュフォルダに何やら原因があると考えられます。
また、このエラーが発生する直前に追加したServiceProviderを削除したらエラーが消えたので、新たに追加されたファイルの読み込みがphp側で正常にできていないようにも見えます。
解決策
素直に一旦キャッシュを消したら解決しました。以下手順。
rootユーザーでphp実行コンテナに接続
./vendor/bin/sail root-shell
phpの各種ファイル読み直し
root@9abf81c98c7e:/var/www/html# composer dump-autoload
キャッシュを消して作り直す
root@9abf81c98c7e:/var/www/html# php artisan clear-compiled
root@9abf81c98c7e:/var/www/html# php artisan optimize
root@9abf81c98c7e:/var/www/html# php artisan config:cache
後はコンテナを再起動したら解決。
Discussion
以下のコマンドでphp実行コンテナに接続してみてはいかがでしょうか?
sailユーザーでログインするので、artisanで生成したファイルに対する権限エラーは発生しなくなるのではないかと。
間違ってたらごめんなさい😅
コメントありがとうございます。
私も最初はsailユーザーでログインしてキャッシュの削除等試してみたんですが、キャッシュファイルの所有者がrootになっていたため同様の権限エラーが発生しました。そのためこの記事ではrootユーザーで実行しています。
ご返信ありがとうございます。
そうだったんですね。失礼いたしました。
services.phpaHBizrはどこから湧いて出てきたんでしょうかね?😅