実は500エラーだった
Xserver Businessに移転して、PHP7.1からPHP7.4に切り替えましたが、移転前のsixcore設定が優先で、PHP7.1のままでした。実はこのとき、500エラーが発生していました。
というのは、composer.jsonのrequirreをPHP7.4にして、composer updateしていました。
"require": {
"php": "7.4.*",
Code language: JSON / JSON with Comments (json)
Xserver Businessのコントロールパネルからエラーログをダウンロードすると、次のエラーでした。
PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.4.0". You are running 7.1.33. in /var/www/html/vendor/composer/platform_check.php on line 24
Code language: plaintext (plaintext)
書いてあるとおりです。composer.jsonにはrequire 7.4 と設定したのに、サーバはPHP7.1のままだからですね。
対応
ローカルでcomposer.jsonのrequireを"7.1.*"に設定しなおして、
"require": {
"php": "7.1.*",
Code language: JSON / JSON with Comments (json)
ローカルでcomposer updateしました。
すると、今度は、
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires php 7.1.* but your php version (7.4.18) does not satisfy that requirement.
Code language: JSON / JSON with Comments (json)
ターミナルで使っているPHPバージョンが7.4だよ、と注意されてしまいました。
ターミナルのPHPを7.1に切り替えてもよかったのですが、composer.jsonのrequireを "~7.1"に修正することにして、composer updateしました。
"require": {
"php": "~7.1",
Code language: JSON / JSON with Comments (json)
サーバ(PHP7.1)にデプロイしました。無事動きました。
次にサーバをPHP7.4に切り替えました。無事動きました。
最後に、composer.json の require を "~7.4" に修正して、composer update。
"require": {
"php": "~7.4",
Code language: JSON / JSON with Comments (json)
サーバ(PHP7.4)にデプロイしました。
composerのバージョン指定
指定 | 対象のバージョン | |
---|---|---|
4.0.0 | 4.0.0 | バージョン固定 |
4.0.* | 4.0.0以上、4.1.0未満 | パッチバージョン |
4.* | 4.0.0以上、4.0.0未満 | マイナーバージョン |
^4.0 | 4.0.0以上、4.1.0未満 | パッチバージョン |
^4.0.5 | 4.0.5以上、4.1.0未満 | パッチバージョン |
~4.0 | 4.0.0以上、4.0.0未満 | マイナーバージョン |
~4.0.5 | 4.0.5以上、4.0.0未満 | マイナーバージョン |
^(キャレット)は、最新のパッチバージョン。
~(チルダ)は、最新のマイナーバージョン。
*(アスタリスク)は、その位置の最新。
composerパッケージのバージョンはセマンティックバージョニングが推奨されています。
例えば、4.0.5 は、メジャーバージョン=4、マイナーバージョン=0、パッチバージョン=5です。
後方互換性のあるバグ修正をしたときは、パッチバージョンを上げます。
あるパッケージ4.0.5を使って動いていたものは、4.0.6に上げても動くはずです。
後方互換性のある変更のときは、マイナーバージョンを上げます。
例えば、新しいメソッドを追加したけれども、既存のメソッドの引数並びや戻り値は変更していない場合です。
あるパッケージ4.0.5を使って動いていたものは、4.1.0に上げても動くはずです。
後方互換性のない変更(破壊的変更)のときは、メジャーバージョンを上げます。
例えば、既存のクラスを削除したり、既存のメソッドを削除したり、引数並びや戻り値を変更した場合です。
あるパッケージ4.0.5を使って動いていたものは、5.0.0に上げても動くとは限りません。