突然、ローカルLaradockでの開発中にPHPの変更が反映されなくなったので、その調べたことをメモしておく。
NginxとかPHPあたりのキャッシュかと思いきや、laradockのファイルのシンクロ?の問題だったぽい。
結論をいうと、laradock/.env
のAPP_CODE_CONTAINER_FLAG
の値を空にすると解決した。
環境
php-fpm/opcache.ini
opcache.enable=1 opcache.memory_consumption=256 opcache.use_cwd=0 opcache.max_file_size=0 opcache.max_accelerated_files=30000 opcache.validate_timestamps=1 opcache.revalidate_freq=0
試したこと
1. コンテナの再構築
$ docker-compose stop $ docker-compose up -d nginx mysql workspace
コンテナを再構築すると、コードの変更は反映されました。 しかし、開発中に変更するたびにコンテナを立て直すのは現実的ではないので、解決にはなりません。
2. Opcacheをoffにした
php-fpm/opcache.ini
を以下のように設定してOpcacheをoffにして、
opcache.enable=0 opcache.enable_cli=0 opcache.memory_consumption=256 opcache.use_cwd=0 opcache.max_file_size=0 opcache.max_accelerated_files=30000 opcache.validate_timestamps=1 opcache.revalidate_freq=0
イメージを作り直しました。
$ docker-compose stop $ docker-compose build --co-cache php-fpm $ docker-compose up -d nginx mysql workspace
結果
コードの変更が反映されるようにはなりませんでした。
3. Nginxのfastcgi_cacheをoffにした
一度Opcacheの設定を戻し、nginx/sites/default.conf
に以下の設定を追加しました
server { ... location / { try_files $uri $uri/ /index.php$is_args$args; fastcgi_no_cache 1; # 追加分 fastcgi_cache_bypass 1; # 追加分 } ... }
Nginxのイメージ作成
$ docker-compose stop $ docker-compose build --co-cache nginx $ docker-compose up -d nginx mysql workspace
結果
コードの変更が反映されるようにはなりませんでした。
4. 上記の2.と3.を両方設定
以上の2と3の設定を両方した上で、イメージ作り直しました。
結果
コードの変更が反映されるようにはなりませんでした。
5. .envのAPP_CODE_CONTAINER_FLAGの値を変更
以下のページにあった方法。まんま当てはまりました。助かるー。
Laradockでホストマシンの変更が反映されない場合の対策 | codechord
laradock/.env
を変更
APP_CODE_CONTAINER_FLAG=
値なし。 再度、コンテナ作成
$ docker-compose stop $ docker-compose up -d nginx mysql workspace
結果
成功 反映されるようになった!!!
このパラメータの意味がいまいちわかってないのだが、誰か詳しい人教えてください。