11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Error Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not foundの解決方法

Last updated at Posted at 2021-02-04

Laravel初学者です。
オリジナルアプリを作成しているのでその過程を記事にしています。

理解が曖昧なところも多いため、ご指摘等ありましたらご連絡いただければ幸いです。

今回は
Error Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found
が出たのでその解決方法を記録として残します。

エラーが出るまでの流れを記載するので長くなってます。

環境

Version
PHP 7.4.14
Laravel 8.24.0
mysql 8.0.23
docker 20.10.2
docker-compose 1.27.4

何をしようとしたのか

こちらの記事を参考にAWSで画像を保存できるようにしようとしました。

ソースコード

新規投稿画面のview
<h1>新規作成</h1>

<form action="{{ route('game.store') }}" method="POST" id="new">
  @csrf

  <div>
    <label>名前</label><br />
    <input type="text" name="name" value="{{old('name')}}">
  </div>

  <div>
    <label>画像</label><br />
    <input type='file' name="image" accept="image/png, image/jpeg">
  </div>

  <div>
    <label>説明</label><br />
    <textarea id="new" name="describe" value="{{old('describe')}}"></textarea>
  </div>

  <input type="submit" value="登録する">

</form>

一般的なFORMです。
storeメソッドで保存しようと思いました。

マイグレーションファイル
public function up()
    {
        Schema::create('games', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('describe');
            $table->string('image_path')->nullable();
            $table->timestamps();
        });
    }

上記はマイグレーションファイルのカラムの構成です。

モデル
class Game extends Model
{
    use HasFactory;

    protected $table = "games";
	protected $fillable = [
        "id",
        "name",
        "describe",
        "image_path",
        "updated_at",
        "created_at",
    ];
}

上記はモデルの記述です。

実装の流れ

ails, Laravel(画像アップロード)向けAWS(IAM:ユーザ, S3:バケット)の設定
でAWSのを使うための設定をする
LaravelでAWS S3へ画像をアップロードする
この記事を参考に進めました。

記事の通りに最後まで進め、いざ投稿ができるか確認してみようとsubmitを押すと

スクリーンショット 2021-02-02 15.46.43.png

上記のように 
Error Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found
のエラーになりました。

素直にエラー文をみると「クラスの定義がされていないとのこと」でnamespaceやuseが定義されていないのかと思いましたが、該当のファイルを見てみたらきちんと定義されていました。

flysystem-aws-s3-v3がインストールされていないのかと思いましたが

composer.json
"league/flysystem-aws-s3-v3": "^2.0"

と、composer.jsonに記載されていたのでインストールされています。

念のため、再度参考にした記事の通りに
composer require league/flysystem-aws-s3-v3
を試してみたところ

スクリーンショット 2021-02-04 15.13.31.png

上記のようなエラーが出ました。

teratailで質問

困ったのでteratailで質問させていただいたところ
「上記のエラー文を見る限りleague/flysystemのバージョンが古くてleague/flysystem-aws-s3-v3の2.0以上に対応していないんじゃないでしょうか。
league/flysystem-aws-s3-v3のほうを対応しているバージョンに下げるか、league/flysystemのバージョンを上げるしかないと思います。」
と丁寧に回答いただきました。

こちらが同じようなエラーが出た方の記事です。

上記記事を参考にcomposer require league/flysystem-aws-s3-v3:"^1.0"とバージョンを指定してインストールしてみようと思います。

COMPOSER_MEMORY_LIMIT=-1 composer require league/flysystem-aws-s3-v3:"^1.0"

私は上記のようにメモリ不足を一時的に解消するCOMPOSER_MEMORY_LIMIT=-1をつけてインストールしました。
(Fatal error: Allowed memory size of 1610612736 bytes exhaustedとエラーが出た場合は`COMPOSER_MEMORY_LIMIT=-1'をつけます)

そうすると

スクリーンショット 2021-02-04 15.41.18.png

上記のように
最後killedで止まってしましました。
これはメモリ不足で負荷がかかる前に勝手に止まってしまう動作のようです。

こちらの記事を参考にメモリを増やしました。

その後
COMPOSER_MEMORY_LIMIT=-1 composer require league/flysystem-aws-s3-v3:^1.0を再実行し無事に成功しました。

composer.json
"league/flysystem-aws-s3-v3": "^1.0"

成功した後はcomposer.jsonのバージョンも1.0になっていました。
うまくいかない時はcomposer installを試すのもいいみたいです。

11
6
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
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?