有一個設定要改,我們挑了最快的路:直接寫進資料庫。

寫入成功。用 SQL 查,是新的值。網站讀到的卻還是舊的。

症狀把我們帶往錯的方向

那個設定決定網站要啟用哪一套主題。網站讀到舊值,新主題就完全沒有被載入:樣式沒有、函式沒有,前台整個退回預設的樣子。

這跟「新主題有錯,系統自動退回預設主題」看起來一模一樣。我們也真的往那邊查了一陣子,語法、必要檔案、主題宣告的格式,一項一項看。全都正常。

怎麼分辨

後來換個方式,直接問系統兩個問題。這套主題有沒有錯誤?系統的主題清單裡有沒有它?

沒有錯誤,清單裡也有,那它就沒壞。問題不在主題,也不在資料庫,而是在兩者之間有東西擋著。

擋著的是常駐的物件快取。網站讀設定的時候會先問快取,快取裡有值,就不會再去資料庫拿。

兩件事

第一,繞過應用程式寫入之後,一定要清快取。

第二,清完之後,要另外開一個行程來驗。在原本那個行程裡,主題的樣式和函式在清快取之前就已經載入完了,當場檢查還是空的,會讓人以為清了也沒用。這一步我們也踩到了。

直接改資料庫不算錯,走捷徑也沒什麼。只是那一次我們忘了,跳過應用程式的同時,連它幫你清快取的那一步也一起跳過了。