ある設定を変える必要があり、いちばん早い道を選びました。データベースへの直接書き込みです。

書き込みは成功しました。SQLで確かめても新しい値です。それなのに、サイトが読んでいるのは古い値のままでした。

症状に引っぱられて、違う方向へ

その設定は、サイトでどのテーマを有効にするかを決めるものでした。古い値が読まれるので、新しいテーマはまったく読み込まれません。スタイルも関数もなく、フロント全体が初期状態の見た目に戻っていました。

これは「新しいテーマにエラーがあって、システムが自動でデフォルトのテーマに戻した」ときと見分けがつきません。実際、私たちもしばらくその方向で調べました。構文、必須ファイル、テーマ宣言の書式と順に見て、どれも正常でした。

切り分け方

そこで、システムに2つ尋ねることにしました。このテーマにエラーはあるか。システムのテーマ一覧に出てくるか。

エラーはなく、一覧にも出てくる。それならテーマは壊れていません。原因はテーマにもデータベースにもなく、その間で何かが邪魔をしていました。

邪魔をしていたのは、常駐のオブジェクトキャッシュです。サイトは設定を読むとき、まずキャッシュに聞きます。キャッシュに値があれば、データベースまでは取りに行きません。

2つのこと

1つ目。アプリケーションを通さずに書き込んだら、必ずキャッシュをクリアする。

2つ目。クリアしたあとは、別のプロセスを立ち上げて確かめる。元のプロセスの中では、テーマのスタイルも関数も、キャッシュをクリアする前に読み込みが終わっています。その場で確かめるとまだ空なので、クリアしても効かなかったように見えます。私たちはここでもつまずきました。

データベースを直接いじること自体は間違いではないし、近道をするのも構いません。ただあのときは、アプリケーションを飛ばすと、アプリケーションが代わりにやってくれていたキャッシュのクリアも一緒に飛ばすことになる、という点を忘れていました。