자바스크립트를 활성화 해주세요

d090 laravel에서 갑자기 Class App not found가 나올 때

 ·  ☕ 2 min read

php laravel을 잠깐 작업을 하다가 화면을 보니 다음과 같은 에러화면이 나오고 있었습니다.

상황

d090_class_app_not_found.png

뭔가 실수로 한 줄을 지웠나?

  • config/app.php 를 이전 commit과 비교를 해봤지만 이상이 없었고,
  • Http/Kernel.php 도 문제가 없었습니다.

내가 뭘 했지? 수정이 반영되고 있는 것 같지 않아서 캐쉬를 지웠는데…

C:\tkim.info>php artisan optimize
Configuration cache cleared!
Configuration cached successfully!
Route cache cleared!
Routes cached successfully!
Files cached successfully!

composer update

우선은 프레임웍이 망가졌나 하고 생각하고, 프레임웍을 복원하려고 애썼습니다.

composer update 를 했습니다. 해결되지 않았어요. 여러 패키지들이 갱신되었는데, 상황은 나아지지 않았습니다.

C:\tkim.info>composer update
Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Installing dependencies from lock file (including require-dev)
Nothing to install, update or remove
Package paypal/paypalhttp is abandoned, you should avoid using it. No replacement was suggested.
Generating optimized autoload files
Class Database\Factories\MenuFactory located in C:/tkim.info/database/factories\ServiceItemFactory.php does not comply with psr-4 autoloading standard. Skipping.
Class App\Repositories\MenuRepository located in C:/tkim.info/app\Repositories\ServiceItemRepository.php does not comply with psr-4 autoloading standard. Skipping.
composer/package-versions-deprecated: Generating version class...
composer/package-versions-deprecated: ...done generating version class
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: barryvdh/laravel-debugbar
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: krlove/eloquent-model-generator
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: laravelcollective/html
Discovered Package: maatwebsite/excel
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: yajra/laravel-datatables-buttons
Discovered Package: yajra/laravel-datatables-editor
Discovered Package: yajra/laravel-datatables-fractal
Discovered Package: yajra/laravel-datatables-html
Discovered Package: yajra/laravel-datatables-oracle
Package manifest generated successfully.
98 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> Illuminate\Foundation\ComposerScripts::postUpdate
> @php artisan ide-helper:generate
A new helper file was written to _ide_helper.php
> @php artisan ide-helper:meta
A new meta file was written to .phpstorm.meta.php

(Package paypal/paypalhttp 이 abandoned 되었구나.. 이건 나중에 봐야겠는데?)

composer가 행하는 autloaded classes를 다시 생성해 봤습니다.

composer dump-autoload

해당명령은 composer dump-autoload 입니다.

C:\tkim.info>composer dump-autoload
Generating optimized autoload files
Class Database\Factories\MenuFactory located in C:/tkim.info/database/factories\ServiceItemFactory.php does not comply with psr-4 autoloading standard. Skipping.
Class App\Repositories\MenuRepository located in C:/tkim.info/app\Repositories\ServiceItemRepository.php does not comply with psr-4 autoloading standard. Skipping.
composer/package-versions-deprecated: Generating version class...
composer/package-versions-deprecated: ...done generating version class
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: barryvdh/laravel-debugbar
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: krlove/eloquent-model-generator
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: laravelcollective/html
Discovered Package: maatwebsite/excel
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: yajra/laravel-datatables-buttons
Discovered Package: yajra/laravel-datatables-editor
Discovered Package: yajra/laravel-datatables-fractal
Discovered Package: yajra/laravel-datatables-html
Discovered Package: yajra/laravel-datatables-oracle
Package manifest generated successfully.
Generated optimized autoload files containing 6869 classes

artisan optimize를 다시 해봤더니 class App 을 찾을 수 없다는 에러메시지가 재현됩니다.

이번에는 composer update 만 하는 것으로도 해결이 되네요.

결론

다음의 명령으로 해결을 시도할 수 있습니다.

  • composer dump-autoload
  • composer update

laravel 캐쉬는 optimize로 캐쉬를 지우는 것보다 해당 캐쉬를 선택해서 지우는 것이 좋은 것 같습니다. 예를 들면,

  • 환경설정을 지울 때는 php artisan config:clear
  • 루팅을 지울 때는 php artisan route:clear
  • 뷰캐쉬를 지울 때는 php artisan view:clear
  • 이벤트 지울 때는 php artisan event:clear
  • 어플리케이션 캐쉬를 지울 때는 php artisan cache:clear
  • php autoloader를 자동 생성할 때는 composer dump-autoload
  • 컴포우저 캐쉬를 지울 때는 다음중 하나 composer clear-cache, composer clearcache, composer cc
공유하기

tkim
글쓴이
tkim
Software Engineer