鶏口牛後な日々

魔法使い(なんでも作れるエンジニア)を目指してます。ブログは発散中

AWSでcomposer installしたら[RuntimeException] /var/www/develop/snakle/vendor does not exist and could not be created. がでた

vendorフォルダが生成できないというエラー

AWSのEC2でWeb APIを公開しようとしています。

Laravelで作ったプロジェクトなので、EC2の環境構築の際に、composer installをすることで開発環境と同じバージョンのLaravelをインストールしようとしたのですが、

[RuntimeException] /var/www/develop/snakle/vendor does not exist and could not be created.

というエラーが出てしまいました。

直訳すると、

/var/www/<適当なパス名>vender が存在しないか、生成されることができませんでした。

ということになりますかね。

vendorフォルダとは?

この /var/www/<適当なパス名>/vender というのは、中略していますが、ここまででひとくくりで、フォルダパスです。 vendor というフォルダは、Laravelのプロジェクトフォルダの直下にあるもので、Laravelで開発している人なら見慣れているものですよね。 Laravelがインストールされると必然的に作られて、依存性のあるプログラムやモジュールを入れておいてくれるフォルダ、という理解です。

解決法

こちら、エラーの文字列そのままググったところ、良いのが出てきました。

こちらのページ

同じエラーに当たった人が投稿したフォーラムの記事ですが、ベストアンサーの人の答えで、

Your folder (var/www) probably is read-only or has not enough rights. for a quick fix, try chmod -R 777

と書いてくれている人がいました。

要するに、フォルダの書き込み禁止に引っかかって、composerが vendor フォルダを自動生成しようとしたけどできなかった、ということだと思います。 ただ何かとむやみに、 777 権限をつけてしまうのは良くないので、 755 くらいでいいと思います。 権限管理について 777 の意味がわからない人は、詳しくは、こちらの記事を参照のこと。(初心者向けです)

結果

私は、vendorフォルダの直上のプロジェクトのフォルダの権限を変更したところ、 composer install が通るようになりました。

以上。

後日追記(2018/10/19)

AWSのLAMPインストールのためのチュートリアルで、ec2-userに権限を与えるために、apacheと同じグループに入れて権限設定する方法が書かれていました。