💥

Laravel Sailで作った開発環境でchmod(): Operation not permitted が発生したら

2021/10/03に公開3

概要

Laravel SailでLaravelの開発環境を作成し、ローカルサーバーを動かしながらコーディングしていたところ、以下のエラーが発生しました。
(開発環境作成直後は問題なく動いてました)

chmod(): Operation not permitted
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

後はコンテナを再起動したら解決。

参考資料

Laravelのキャッシュを削除する - Qiita

Discussion

やまびこやまびこ

以下のコマンドでphp実行コンテナに接続してみてはいかがでしょうか?
sailユーザーでログインするので、artisanで生成したファイルに対する権限エラーは発生しなくなるのではないかと。

$ sail shell

間違ってたらごめんなさい😅

DE-TEIUDE-TEIU

コメントありがとうございます。
私も最初はsailユーザーでログインしてキャッシュの削除等試してみたんですが、キャッシュファイルの所有者がrootになっていたため同様の権限エラーが発生しました。そのためこの記事ではrootユーザーで実行しています。

やまびこやまびこ

ご返信ありがとうございます。
そうだったんですね。失礼いたしました。
services.phpaHBizrはどこから湧いて出てきたんでしょうかね?😅