LoginSignup
2
0

More than 3 years have passed since last update.

EC2にLaravelプロジェクトをデプロイしていく中で、artisanが実行できなくなった時にやること

Last updated at Posted at 2021-01-10

背景

Mac環境でLaravelプロジェクトをAWSのEC2にデプロイしようとしたところ、php artisan key:generatePHP Fatal errarで返ってきてしまいました。
しかし何日かの奮闘の末、解決することが出来たので、同じ悩みを持つ方の手助けに少しでもなればと思いその解決方法を共有させていただきます。

結論:バージョンとcomposer.json

このエラーは
1. composer.jsonの中身がおかしかったこと
2. ローカルのものとEC2上のものでバージョンが違っていたこと
の2点が原因でした。したがってまずcomposer.jsonの中身を書き換えるところから説明していきます。

composer.jsonの中身を書き換える

重要なcomposerのファイルは2種類あります。このエラーで悩まれている方なら2つとも既に存在しているファイルです。
composer.json
- composer installを実行する際にはこのjsonファイルの定義を元にパッケージのダウンロードを行う
- composer updateでjsonの定義を元に各バージョンのライブラリををアップデートする。
composer.lock
- composer installでlockに書き出されて各バージョンのライブラリをダウンロードする。

引用 https://qiita.com/a-nishimura/items/8c71085183e0b8a53f6a

したがって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
composer update —no-scripts
composer dump-autoload

これらが上手くいかなかったのは、前述の通り大元のcomposer.jsonを書き替えてなかったからだと思います。

2
0
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
2
0