このサイトにはプロモーションが含まれます

【Laravel】MinIO にputできない問題が情けなさ過ぎた

概要

個人開発で使用している以下スタックで画像を保存できない問題がおきた。

  • Laravel10
  • MinIO(S3の代わり)
  • Intervention IMage 3

調査

Intervention IMage

Intervention IMage がVersion2 → Version3 で大きく変わったこともあり、使用法を疑ったが、何ら問題はなかった。

debug等の値を見て見たが、問題なし。。。

    /**
     * 画像をリサイズする.
     *
     * @param \Illuminate\Http\UploadedFile $file
     * @return \Intervention\Image\Interfaces\ImageInterface
     */
    public function resize(UploadedFile $file): ImageInterface
    {
        return $this->ImageManager
            ->read($file)
            ->resize(Media::BLOG_IMAGE_WIDTH, Media::BLOG_IMAGE_HEIGHT);
    }


    /**
     * 画像をS3にPutする.
     *
     * @param string $path
     * @param \Illuminate\Http\UploadedFile $file
     * @return bool
     */
    public function putForS3(string $path, UploadedFile $file): bool
    {
        $convertFile = $this->ImageManger->resize($file)->toPng();
        return $this->diskS3->put($path, $convertFile);
    }

minio への通信

ローカル環境をDockerを用いて開発していることもあり、ローカルネットワークが怪しいと何故か閃いた。

以下のコマンドを用いてネットワークを見たところ、同じネットワーク内に存在していたのでコンテナ間の通信は担保されている様子でした。

docker network ls
docker network inspect

ただし、 minio に向けた curl コマンドが返ってこないことが分かった。

原因

調査を進めていくと、サービス名に対してエンドポイントを指定しないといけないことが分かった。

minio:
    image: quay.io/minio/minio:RELEASE.2023-01-18T04-36-38Z
    container_name: 'discovery-gem_minio'

今回はminioとして登録していたので、 .env のエンドぽいとの指定が以下の様に設定する必要がありました。

AWS_ENDPOINT=http:{docker-compose.ymlで指定したport}//minio

たったこれだけのために頭を悩ましたのは悔しすぎる。

 

Twitterでフォローしよう

読んでみーな
おすすめの記事