LoginSignup
4
4

More than 5 years have passed since last update.

Laravelを5.2から5.3にあげるときに別環境反映時のcomposer updateに注意

Posted at

注意

Laravelのアップグレードガイドに沿って5.2から5.3へのバージョンアップを行った上で、別の環境にも適用しようと行ったところ、下記のようにcomposer updateが行えない現象が発生しました。

[vagrant@localhost laravel]$ composer update
> php artisan clear-compiled


  [ErrorException]                                                                                                                                              
  Declaration of App\Providers\EventServiceProvider::boot() should be compatible with Illuminate\Foundation\Support\Providers\EventServiceProvider::boot(Illuminate\Contracts\Events\Dispatcher $events)


Script php artisan clear-compiled handling the pre-update-cmd event returned with error code 1

解決策としては下記のように、単純に--no-scriptsをつけてあげます。

composer update --no-scripts

以上。

経緯と原因

というだけでなく、その経緯、エラーの原因を記していきたいと思います。

そもそも、Laravelのアップデート手順として

  1. composer.jsonの更新
  2. composer update
  3. Laravel使用側のソースの書き換え

といった順番をとると思います。
書き換えたcomposer.json及び、他ソースをGitに反映しますよね。
その後、別環境にある同じプロジェクトに更新を反映させる手順は下記になると思います。

  1. Gitからソースを反映
  2. composer update

そのときに下記のようなことが起こります。

  1. Laravelを使用している側のソースが5.3のものに変わる
  2. Laravelのcoreが5.2のまま、5.3の使用方法で動作する
  3. composer update時、更新前にartisanが使用されるため、5.3用に書き直したソース(EventServiceProvider等)が5.2を参照しエラーを発生させる
  4. composer update失敗

流れとしては以上です。
なので対策としては最初にcomposer updateするときはartisanコマンドを起動しないように--no-scriptsをつけてあげればいいというわけです。

4
4
0

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
4
4