本記事の目的
システム内にお知らせや注意文言が記載されている場合、それの文言を急に差し替える為にbladeファイルを編集したが、反映されない場合があり原因を調査したのでその備忘録。
冷静に対処したら良かったが、当時はかなりてんぱった。
結論
bladeファイルのキャッシュはタイムスタンプ比較で生成されるので、バックアップファイルから復元した場合などは別途タイムスタンプを更新する必要がある。
##確認
①以下のようにlaravelのトップページに「動作確認用」と文字を入れておく。
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
動作確認用
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">
<!-- Styles -->
②以下のようにバックアップを取得しておく
cp -ip welcome.blade.php bkwelcome.blade.php
③welcome.phpから「動作確認用」という文字を消す→反映される。
③バックアップを戻す(※やっぱりさっきの作業はなしで!と依頼元から連絡があったときを想定)
$ cp -ip bkwelcome.blade.php welcome.blade.php
→このようにファイルを戻しても反映されない。
④タイムスタンプを更新する。
touch welcome.blede.php→これで反映される。
おそらく上記の理由
公式のドキュメントには以下の記載があります。
「すべてのBladeテンプレートはプレーンなPHPコードにコンパイルされ、変更されるまでキャッシュされます。」
この仕組み自体がlaravelの高速化に役立っているのですが、今回はこちらが悪いほうに働いたようです。
この「変更されるまで」というのがおそらくタイムスタンプ比較なのではないかと思います。
そのため、バックアップファイルをそのまま戻した場合は、タイムスタンプが古いままなのでキャッシュされない、ようです。
このような事象は普通にググると、php artisanでclearしたらよい、などど出てきますが、
本番稼働中の環境では影響範囲が見えない為やりたくないのでタイムスタンプ更新で回避しました。