背景
Mac環境でLaravelプロジェクトをAWSのEC2にデプロイしようとしたところ、php artisan key:generate
がPHP Fatal errar
で返ってきてしまいました。
しかし何日かの奮闘の末、解決することが出来たので、同じ悩みを持つ方の手助けに少しでもなればと思いその解決方法を共有させていただきます。
結論:バージョンとcomposer.json
このエラーは
- composer.jsonの中身がおかしかったこと
- ローカルのものとEC2上のものでバージョンが違っていたこと
の2点が原因でした。したがってまずcomposer.jsonの中身を書き換えるところから説明していきます。
composer.jsonの中身を書き換える
重要なcomposerのファイルは2種類あります。このエラーで悩まれている方なら2つとも既に存在しているファイルです。
composer.json
- composer installを実行する際にはこのjsonファイルの定義を元にパッケージのダウンロードを行う
- composer updateでjsonの定義を元に各バージョンのライブラリををアップデートする。
composer.lock - composer installでlockに書き出されて各バージョンのライブラリをダウンロードする。
したがってcomposer install
において、composer.jsonの定義がとても重要になります。しかし私の場合、このjsonファイルが2行しか書かれていませんでした。
確認及び書き換えはvim composer.json
で行うことが出来ます。内容を確認した後、jsonファイルを以下の内容に書き換えましょう。
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"require": {
"php": "^7.2.5|^8.0",
"fideloper/proxy": "^4.4",
"laravel/framework": "^6.20",
"laravel/tinker": "^2.5"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.3",
"facade/ignition": "^1.16.4",
"fakerphp/faker": "^1.9.1",
"laravel/ui": "^1.2",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^8.5.8|^9.3.3"
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
}
この段階では、まだcomposerのインストールは行いません。
次にバージョン合わせです。
バージョンを合わせる
私の場合、ローカルがPHP7.3、EC2がPHP7.2でした。ということはEC2上でPHPのバージョンを7.2から7.3へと上げなければなりません。以下にそのやり方を記述していきます。
まずPHPのバージョンを確認していきましょう。
php -v
次にバージョンを7.2から7.3へ上げていきます。
sudo amazon-linux-extras disable php7.2
sudo amazon-linux-extras disable lamp-mariadb10.2-php7.2
sudo amazon-linux-extras enable php7.3
sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd
sudo yum install php-mbstring
sudo yum install php-dom
参考:https://forums.aws.amazon.com/thread.jspa?messageID=908568
composerをインストールする
これで最後です。
composer install
最後に
ここまでお疲れ様でした。最後に、私がこの方法に行き着くまでに試したコマンドを以下に載せようと思います。ただし、lamp-maraiadb10.2をdisableにしていることには留意してください。
composer update —no-scripts
composer dump-autoload```
これらが上手くいかなかったのは、前述の通り大元のcomposer.jsonを書き替えてなかったからだと思います。