Help us understand the problem. What is going on with this article?

composer, artisanコマンドでclass not foundして頭も画面も真っ白になった話

More than 1 year has passed since last update.

評価環境にデプロイする時、gitからソースコードをチェックアウトしキャッシュファイルを作成していた。

$ git pull --no-ff --no-edit origin develop/1.0
$ php artisan config:cache

ただロールバックしたくなったので、一度マージ前のコミットに戻り、
キャッシュし直そうとした所、エラーになった。

$ git reset --hard HEAD^
$ php artisan config:cache
In ProviderRepository.php line 208:

  Class 'App\Providers\TestServiceProvider' not found

最初にチェックアウトしたコードに含まれるTestSerciveProviderクラスを探しに行っているが、ロールバックしたのでクラス定義ファイルはなくエラーになっているようだ。

composerのクラスマップがキャッシュされてしまっているのかと思い、composer clear-cacheに飛びつくが関係なかった。
再度dump-autoloadし直すも状況は変わらず。

$ composer dump-autoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover

In ProviderRepository.php line 208:

  Class 'App\Providers\TestServiceProvider' not found


Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1

$ php artisan config:cache
In ProviderRepository.php line 208:

  Class 'App\Providers\TestServiceProvider' not found

色々ネットで調べてもいまいち原因が分からず10分ほど経過した頃、TestServiceProviderクラスの読み込みは確かconfig/app.phpに記載してたなーと思っていたら原因に気づいた。

php artisan config:cache した時に生成していた bootstrap/cache 以下のキャッシュファイルに今はもう存在しないクラスが記載されていて、これを作成し直そうにも artisan コマンドが最初にこのファイルを読みに行ってエラーになっていたようなので手動で削除したところ、問題なくキャッシュし直す事ができ、無事解決!

$ php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

このエラーの間、画面にアクセスしても真っ白な状態だったのでこれが本番環境でなくてほんとに良かった。。

wh-plus
「日々の生活と心にゆとりと豊かさ」を生むためのサービスを提供している会社です。
https://www.wh-plus.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away