##現象
SampleController.php
というファイルを参照して欲しいのに、同ディレクトリ内のSampleController_20181111.php
というバックアップのためにとっておいた古いファイルを参照してしまっていました。
ステージング環境で起きた現象なのですが、ローカル環境で変更した内容をステージング環境へ適用する前に、ステージング環境にあるSampleController.php
をバックアップとしてSampleController_20181111.php
にリネームしておき、git pull
でSampleController.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-cache
やcomposer 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年以上同じ環境でやっていて今までもバックアップファイル作ったりしていたけれど、初めてのことだったので戸惑いました…。