Laravel

artisan route:cache で Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute' の解消

$ php artisan route:cache を実行したところ

Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute' 

というエラーが発生しました。
解消したので原因と方法についてです。

解消方法

結論からいうと、routes.phpの削除

$ rm bootstrap/cache/routes.php

を実行することで解消しました。

原因

artisan route:cache はキャッシュファイルbootstrap/cache/routes.phpを生成するのですが、
どうやらこのときに既存のものがあれば一度中身を解析するようです。
このとき、生成した環境とコマンドを実行した環境でphpのバージョンが異なるとunserializingに失敗しエラーがでることがあります。

私の場合はansibleによりlocal環境のファイルをサーバーに転送してデプロイするプロジェクトで起こりました。
localは他プロジェクトの関係でphp8にあげており、該当プロジェクトのサーバーはまだphp7系でした。
そのためansibleの./artisan route:cache実行前にrm bootstrap/cache/routes.phpを挟むことで解消できました。

原因はphpのバージョン齟齬なのでデプロイ時以外にも、php-cliとphp-fpmのバージョンの差によっても起こることがあるようです。

バージョンを合わせられるならそれがよいですが、
取り急ぎ既存ファイルの削除で対応できるので急ぎのときや依存を減らす際は削除で対応しましょう。

参考:https://github.com/laravel/framework/discussions/31056

-Laravel