Laravelの環境構築でハマりやすいエラーと対処法をまとめます。
はじめに
Laravelの環境構築する際に割と遭遇しやすくその都度調べて解決しているものがあるので、備忘がてらまとめておこうと思います。(今日も地味にハマったり・・)
composer create-projectやlaravel newコマンドを使ってゼロから構築する場合ではなく、PC買い替えや本番に初めて公開する時など久しぶりに構築する際にハマってることが多いかもです。
Laravelのバージョンは最新の5.8です。
キャッシュ周りのエラー
composer install後の初回起動でよくハマるのがこのエラーで、エラーメッセージは以下の通りです。
FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught InvalidArgumentException: Please provide a valid cache path. in<br /> /var/www/local/tools/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php:36
Laravelのキャッシュは以下に格納されますが、これらのフォルダがgit管理対象外になっている場合はcloneしても存在しなく結果エラーという感じです。
- APP_ROOT/storage/framework/cache
- APP_ROOT/storage/framework/sessions
- APP_ROOT/storage/framework/views
存在しない場合は作っておきます。
$ cd path/to/APP_ROOT
$ mkdir -p storage/framework/cache
$ mkdir -p storage/framework/sessions
$ mkdir -p storage/framework/views
ちなみに、.gitkeepファイルを置いてこれらフォルダもgit管理しておくのが、後々のことを考えても楽かと思います。
暗号化キー周りのエラー
.envファイルを作っても暗号化キーを生成していないと以下のエラーが発生します。
No application encryption key has been specified.
artisanコマンドで作成すれば良いです。
$ php artisan key:generate
マイグレーションでエラー発生した後から発生するエラー
マイグレーションの途中でエラー終了し、修正したあと再度マイグレーション実行した際によく見かけます。
PDOException::("SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists")
上述のエラーなので既にテーブルがあると思いきや、mysqlに入ってshow tablesしても見当たらないという・・
内部で不整合な状態になっているようで、ググって以下で解決出来ました。
$ php artisan tinker
$ Schema::drop('users')
$ php artisan migrate --seed
さいごに
チームに新規メンバが参画した際など環境構築で地味につまづくことは多いと思います。
手順書はあるもののメンテナンスされていない、そもそもまともな手順書すらないケースもあります。
dockerで完全にコード化してbuildとコンテナ起動だけですぐ使えるようなルールが徹底されると楽そうです。
僕もそれほどdockerを理解できていなく、学習コストはそれなりに掛かると思いますが・・・