確認環境
Mac OS Ventura 13.7.4 → 追記 13.7.6 UPDATEしました
Vscode
laravel 12
Docker 4.22.0 → 追記 4.41.2 UPDATEしました
yield, section が正しく動作しない
Laravel12 の学習中 @yield
, @section
が動きませんでした。
学習していたサイトはこちら。
ブラウザの画面に次のような表示が出ています。
("author": "Felix Geisendörfer (http://debuggable.com/)", "name": "combined-stream", "description": "A stream that emits multiple other streams one
ChatGPTの回答で、node_modules
を削除して、npm i
を実行してみて言われたので、実行してみたものの、次のパターンに変わっただけ。
a:3:{s:6:"_token";s:40:"BAIALXd3B6U1zHWnYYCAFYKR1hd3Bi9NrEQC0s8v";s:9:"_previous";a:1:{s:3:"url";s:21:"http://localhost:8080";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
明らかに何かがおかしい。
原因
ChatGPT のすすめで、次のコマンドでログをログを確認した所、
docker compose logs db
compose.yaml
の
db の volume 設定先(今回は ./docker/mysql/data, ./docker/mysql/initdb.d)で、
Mac の隠しファイル(._ファイル名)が生成されているのが原因らしい...
db-container | chown: changing ownership of '/var/lib/mysql/performance_schema/._memory_summary_b_154.sdi': Operation not permitted
db-container | chown: changing ownership of '/var/lib/mysql/performance_schema/._memory_summary_b_155.sdi': Operation not permitted
...以降多数
解決策
1, docker-compose.yaml や compose.yaml で named volume (名前付きボリューム)を設定する
services:
db:
build: ./docker/mysql
container_name: db-container
volumes:
- - ./docker/mysql/data:/var/lib/mysql
- - ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
+ - mysql-data:/var/lib/mysql
+ - mysql-initdb:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=mysql
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=password
- TZ=Asia/Tokyo
ports:
- '3306:3306'
app:
build: ./docker/php
container_name: app-container
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./app/laravel:/var/www
ports:
- '8080:80'
depends_on:
- db
phpmyadmin:
build: ./docker/phpmyadmin
container_name: phpmyadmin-container
volumes:
- phpmyadmin-sessions:/sessions
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db
- PMA_USER=root
- PMA_PASSWORD=mysql
ports:
- '4040:80'
depends_on:
- db
#以降を追加
+volumes:
+ mysql-data:
+ driver: local
+ mysql-initdb:
+ driver: local
2, 実行中のコンテナに入り、キャッシュをクリアする
docker compose exec app bash
php artisan view:clear
php artisan cache:clear
3, docker を再起動する
docker compose stop
docker compose up -d
これで直りました。
古いボリュームは削除しておきます。
rm -r ./docker/mysql/data
追記
その後、複数のページ遷移時に、〇〇.blade.php の内容がうまく更新されなかったので、
Mac と Docker をアップデートして、キャッシュクリア、ブラウザもハード再読み込みで更新されるようになりました。