2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

laravel5.4で古いコントローラーが参照されてしまう現象

Last updated at Posted at 2018-11-16

##現象
SampleController.phpというファイルを参照して欲しいのに、同ディレクトリ内のSampleController_20181111.phpというバックアップのためにとっておいた古いファイルを参照してしまっていました。

ステージング環境で起きた現象なのですが、ローカル環境で変更した内容をステージング環境へ適用する前に、ステージング環境にあるSampleController.phpをバックアップとしてSampleController_20181111.phpにリネームしておき、git pullSampleController.phpを持ってきたという状況です。
するとステージング環境での動きがおかしく、どうも変更した内容が反映されていないっぽいということに気付き(これに気付くまでも時間がかかりました…)、SampleController_20181111.phpを削除してSampleController.phpのみの状態にしたのですが、SampleController_20181111.phpというファイルがありませんみたいなエラーになって、なんでそっち参照しようとするの?ってなりました。

##原因
キャッシュされている…っぽい?
けどよくわからないです…

コメントしていただいたのですが、実ファイルを変更しても/vendor/composer/autoload_classmap.phpが変更されてないとダメで、その不整合をcomposer dump-autoloadで書き直してくれるということらしいです。
それが今回の原因っぽいです。

##対応
とりあえずphp artisan optimizeをしたら正しいファイルを読み込んでくれました。
※コメントしていただいたのですが、php artisan optimizeはversionによって何をやっているかが全然違うみたいなので注意です。

その後ネットで調べていて、composer clear-cachecomposer dump-autoloadで解決できるらしいです。私はまだ試していないですが。
参考1:Laravel 5.4 using old controller in controllers directory
参考2:Laravel ClassLoader trying to load an old version of my model

1年以上同じ環境でやっていて今までもバックアップファイル作ったりしていたけれど、初めてのことだったので戸惑いました…。

2
1
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?