AnDeriensのブログ

個人的なブログです

ローカルのLaradock環境でPHPの変更が反映されない問題

突然、ローカルLaradockでの開発中にPHPの変更が反映されなくなったので、その調べたことをメモしておく。

NginxとかPHPあたりのキャッシュかと思いきや、laradockのファイルのシンクロ?の問題だったぽい。

結論をいうと、laradock/.envAPP_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

結果

成功 反映されるようになった!!!

このパラメータの意味がいまいちわかってないのだが、誰か詳しい人教えてください。