この現象は、私同様、Laravelを試してみようという人が中心に引っかかる罠だと思われる。
背景と対策
Laravelを下記のように立ち上げた際に、その後マニュアルやチュートリアル通りに進めようとすると、artisan呼び出しの際に様々なエラーが発生する。
下記はWindows環境でDocker Desktopを入れた後に、WSLから下記のように入力するだけで環境の構築が終わるとLaravelのマニュアルにあるので、それに倣った形だ。
$ curl -s https://laravel.build/sample-app | bash
$ cd sample-app && ./vendor/bin/sail up
$ php artisan about
これらはartisanの呼び出しを php artisan
から ./vendor/bin/sail artisan
に変更すると解決する。どこかに書いてあるのに、見逃しているんだろうな...。
見られる現象
少し試しているだけでもかなり引っかかった。
1. .env用のキー生成ができない
.envファイルのキー文字列を生成するためにartisan
を使用するとある。マニュアルで確認すると下記の1行で一発なのだが、これがうまくいかない。
$ cd sample-app
$ php artisan key:generate
結局、アレがないこれがないと入力し続けた結果処理を行うには下記の準備をして最小構成ではなくDocker形無しである
$ sudo apt update -y
$ sudo apt upgrade
$ apt install php-cli php-dom
$ cd sample-app
$ php artisan key:generate
これは下記が正解。
$ cd sample-app
$ ./vendor/bin/sail artisan key:generate
2. migrateできない
$ php artisan migrate
Illuminate\Database\QueryException
could not find driver
(SQL: select * from information_schema.tables
where table_schema = sample_app
and table_name = migrations
and table_type = 'BASE_TABLE')
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:759
(...以下省略)
MySQL接続ドライバがないとかそんなエラーになると思うのですが、おかしいでしょ。
ネットを探索しても、解決方法は、MySQLConnectionエラーが発生する原因を特定するための特殊なMySqlConnection
を作って..って遠回りなものが検索結果として出てきます。
難しいです。
Sailで準備した場合は下記が正解です。
$ ./vendor/bin/sail artisan migrate
3. migrationファイルの権限がない
上記のエラー試行錯誤して ./vendor/bin/sail artisan
で解決した後、
今度はファイルのアクセス権限がなくなります。
$ ./vendor/bin/sail artisan migrate
In Filesystem.php line 210:
chmod(): Operation not permitted
私のような人は「今度は./vendor/bin/sail 使っているのに...?」となります。
これは、php artisan migrate
で作成したファイルのアクセス権限がない事で発生します。php artisan migrate
で生成されたファイルは権限を変更するか、いったん削除することで解決します。