はじめに
こんにちは、エンジニアのkeitaMaxです。
備忘録としてエラーが出て困ったことを書きます。
version
- laravel12
困った内容
- name: dokcer-compose up
run: |
docker compose up -d
- name: composer install
run: |
docker compose exec app composer install
- name: Laravel Settings
run: |
docker compose exec -T app cp .env.example .env
docker compose exec -T app php artisan key:generate
docker compose exec -T app php artisan migrate
GitHubActionsで↑を実行したら以下のようなエラーが出ました。
Run docker compose exec -T app cp .env.example .env
INFO Application key set successfully.
Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select exists (select 1 from information_schema.tables where table_schema = 'database' and table_name = 'migrations' and table_type in ('BASE TABLE', 'SYSTEM VERSIONED')) as `exists`)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:825
821▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
822▕ );
823▕ }
824▕
➜ 825▕ throw new QueryException(
826▕ $this->getName(), $query, $this->prepareBindings($bindings), $e
827▕ );
828▕ }
829▕ }
+41 vendor frames
原因
原因はMySQLがまだ応答していないのにマイグレーションファイルを流していることでした。
解決策
以下のようにMySQLを待つという処理を入れたら解決しました。
- name: dokcer-compose up
run: |
docker compose up -d
- name: composer install
run: |
docker compose exec app composer install
- name: wait-for-db
run: docker compose exec db mysqladmin ping --silent --wait=30
- name: Laravel Settings
run: |
docker compose exec -T app cp .env.example .env
docker compose exec -T app php artisan key:generate
docker compose exec -T app php artisan migrate
おわりに
この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。
最後まで読んでいただきありがとうございました!