部署說成功、閘門說沒事,網站卻是舊版:第三週回顧

涵蓋期間:2026-08-10(週一)至 2026-08-16(週日) · 補寫發布:2026-09-23

ALLinAI 編輯部 · AI 依當時的工作紀錄與版本紀錄整理

8月10日到16日這一週,最花時間的事是重新確認那些已經回報成功的事,到底有沒有真的成功。結果不好看:A 站部署完成、系統全綠,去讀公開網址還是舊的一份;保護所有網站不掉頁的閘門,比對基準是7月底的舊快照;8月15日盤點時,13個資料改由雲端產生的網站,沒有一個拿得出證據說線上跑的就是驗證過的那一版。

這些事沒有共同的程式錯誤,只有共同的形狀:系統裡的狀態欄位、快照與回報訊息都說沒問題,讀者打開的網站卻是另一回事。這週的轉變是把判準往外推一格,任何結論都要回正式網站重讀一次才算數。它連著一個很實際的目標:只有說得清楚線上那一份的來歷,才敢把筆電上的資料刪掉。

部署回報成功,網站還停在舊版本

8月13日,A 站的油價與加油站資料改由雲端產生後部署,流程全綠。收尾時有人不看部署系統的回報,直接去讀公開網址,才發現網域還綁在一組早該停用的舊伺服器設定上:線上仍是397個加油站的舊版,當天新增的兩個加油站打開是404(頁面不存在)。改綁回正確設定重新部署,讀回來是399個加油站;同時替8個頁面加上正反兩面的檢查,不只看該有的東西在不在,也看不該留的舊內容有沒有真的消失。

三天前有更嚴重的版本。每個網站部署前都要跑一道零流失檢查:新版本的網址清單不能比線上少任何一條。8月10日發現它的基準檔是7月28日的舊快照——其中一個站一次檢查誤報76條網址即將消失,改對線上實際的網址清單重算,真實數字是3條。這份過期基準54個網站全中,其中52站的檔案時間凍結在同一次批次快照,而抽查這54站,最近一次正式部署全部晚於自己的基準。會同時製造假警報和漏報的閘門比沒有閘門更麻煩,它讓真正的掉頁躲進雜訊裡。處置是在判定有網址消失時,加一道對線上網址清單的二次仲裁。

真流失、假警報,以及分不出來的那些

同一天的普查說明了為什麼難分。34個網站裡有6個真的少了頁面,合計14,119條,另一個站一站就占13,344條、94%——它的建置程式在七月一次整批存檔失誤後直接當掉,一頁都產不出來;修好後一次建出15,344頁,線上那15,287條網址全部涵蓋在內,這一輪救回13,927頁。另外5個網站原先也被判定有流失,重新建置一次就歸零,是本機舊產物過期造成的假警報;23個網站從頭到尾沒事。某個站的56個投資知識頁則真的不見了,當天補回。

8月11日深夜差點誤判一次。稽核代理人回報一個地方資料站首頁寫著業者0家、縣市0個,看起來是那晚最嚴重的讀者實害;彙整的人先自己去讀正式站,上面寫的是341家業者、15個縣市,完全正常——那些0只存在於本機快照裡。把快照的毛病寫成網站的缺陷,一次就足以讓整份稽核失去可信度,這條後來寫成規則:要說某一頁有缺陷,先去讀那一頁。

網站承諾的東西,資料裡其實沒有

同一批稽核抽了14個網站,4個有真實缺陷,型態一致:頁面對讀者承諾了資料裡不存在的東西。A 站的10篇縣市文章告訴讀者可以查油品,資料集沒有這個欄位;雲林那篇還建議篩選自助柴油站,而全台的自助柴油站一共只有4座,雲林一座都沒有,這站共修35處。B 站的368個鄉鎮頁寫著會整合紫外線、陣風與雨量來判斷,這三個欄位在每一份預報檔裡都是空的,共修738處。另一個站883頁的頁面說明提到可回收項目區塊,實際上一頁都沒有。還有一個站的斗六頁自己前後矛盾,開頭寫有免費停車場,同頁下方又寫不能承諾指定停車場。

比文案更直接的是搜尋框:B 站451個頁面都放著搜尋框,這個站卻從來沒產生過搜尋用的索引檔,讀者一打字就得到讀取失敗,另外兩個網站一樣。稽核也留下一條方法:前端那份精簡索引檔只是資料的一小部分,只看它會大量誤判,必須同時掃頁面上真正渲染出來的區塊。

文章篇數也對不上。45個網站的稽核找到兩種相反成因:7個網站是建置程式把篇數寫死,其中一個站首頁停在178、真正有194篇,另一個站標60、其實是90;另外6個網站是有人把文章直接插進已部署的靜態檔案、漏改計數,還有一個站那3篇在23份程式碼副本裡都找不到來源,這幾站照程式庫重建再部署,文章會直接消失。

最難看的是誠信類的一項:16個已經公開的頁面寫著文章經人員審閱後定稿,而這些網站其他地方都清楚寫著未經逐篇人工覆核,根因是寫作流程的設定檔裡有一段寫死的句子與實際做法相反。當天找出全部頁面並改好措辭,但沒有部署,那天結束時讀者看到的還是錯的那一句。

重建一次,才知道會弄壞什麼

上一週我們把上雲門檻訂成在乾淨機器上重建、再和線上逐條比對。這週真的對B 站跑完一次,得到的是警告:線上458頁、重建出454頁,兩邊共有的454頁裡只有3頁逐位元組相同。落差分六類——368個地區頁的網址從看得懂的地名變成一串雜湊、搜尋功能整組消失、8頁標示AI參與製作的揭露句不見了、全站日期在沒有實質改動下被刷新、一個說明頁退回舊版,還有3篇文章和一個指南首頁消失。

根因是一個從未進版本控制的地名對照檔遺失,程式找不到它就默默改用雜湊當網址;368筆從正式站頁面反解析回來後,漂移歸零。但在這份檔案寫回去之前,任何人執行那支建置程式都會做出368個錯網址。能重建不是一個開關,是要一站一站補到位的狀態,補好之前它本身就是風險。

把資料出處一條一條查回官方

8月12日到14日安靜一些,做的是同一件事:讓資料站的每一筆資料都指得回官方來源,並改由雲端自動產生。其中一個站原本有路名英譯、村里巷弄英譯、舊制郵遞區號對照等項目查不到出處,這天10項全部查回官方公開資料,涵蓋368個鄉鎮市區;另一個站先釐清舊資料混了稅籍登記與公司登記兩種定義,排除一份只涵蓋資訊軟體服務業的子集,再轉為雲端產生,共1,826,222家公司登記。同一批還有一個站的325筆商圈、另外一個站的167家移民公司與155家律師事務所、C 站從10105期到11505期的85期期別,都逐筆對回官方資料,這個站另外拿掉了負責人姓名這類個人資料。8月13日整夜也把65個網站的資料來源分成四類:已雲端驗證的7站、不需要外部資料的3站、仍讀著沒有雲端驗證來源的52站,以及3站出處未釐清。

沒有一站能證明線上跑的是驗證過的版本

為什麼這麼在意資料搬家,8月13日的分類裡有答案:那7個已經拿到驗證收據的網站,收據上都明白寫著尚未確認正式部署,所以本機那份資料一份都不能刪。磁碟問題的出口,卡在這個欄位上。

8月15日的盤點比預期糟:13個網站,0個能靠讀回資料就出示證明。11站線上跑的版本比驗證過的版本早了1.3到10.9天;A 站部署的是驗證版本24分鐘之後的另一版,被逐字元比對正確擋下;一站手動上線,沒有可追的版本編號;還有一站在部署平台整個帳號裡查不到任何專案。同一次盤點也發現,負責回答「有沒有正式部署」的那一層檢查根本沒接上掃描邏輯,只是一個寫死的固定答案。

補法是把一個階段拆成兩個關卡:資料產生完成是一關,正式部署完成是另一關,各自出示證據。A 站當試點走完全程:驗證跑兩輪、觸發部署、把部署出來的檔案樹和驗證通過的產物逐位元比對(862個檔案零差異)、再從正式網域讀回確認;通過後同一套流程當天套到另外10個網站。另一個站卡在打包工具只收一種格式、遇到成分名組成的長檔名就拒收,放寬並確認不會讓人塞進偽造路徑後補上第12份證明。週末結束時13站裡12站成立,只剩那個共用商圈資料、沒有中文站名的姊妹站卡在人工排查;8月16日凌晨,一個沒參與前一天工作的AI把12站的證據鏈從頭重跑一次,全數通過。

一通來信,和差點被下架的兩個頁面

8月15日下午收到一封來信,指出另一個站上某家心理諮商所的電話有誤。官方立案名冊登的仍是舊號,錯不在我們這邊;機構自己官網公告的電話、地址與站上其他欄位吻合,判定要改。原本打算直接用本機那份檔案推上去,推之前先跟線上比了一次,發現線上多了兩個本機沒有的頁面,照本機推就會把這兩頁下架。改成把本機檔案和線上多出來的檔案合起來,只改電話這一項;上線後把站上會出現這支號碼的9處全部確認過,那兩頁也還在。那份官方名冊仍是舊號,凡引用它的網站都會一起錯。

這是整週主線的縮小版:照標準流程整站重建會有1,258個檔案跟著變動,其中很多變動我們並不想要,只改該改的那一處反而比較誠實。

這一週的事故有同一個形狀

剩下的事故幾乎都是同一種形狀:一個動作的波及範圍比它的意圖大很多。8月11日那一夜,同時有多達15到20個工作階段在同一份程式碼上動工,其中一次清理型提交夾帶了別人暫放的一個排除設定檔,那份設定放在程式庫最上層、會套用到每一個網站,結果其中一個網站的建置少掉7185個檔案並失敗,當天修好;同一晚自動化測試因帳務問題整批秒退,超過6小時所有工作階段只能靠本機測試把關。8月13日替一個股票代碼比對工具補修正時誤用強制推送,把剛推上主線的一筆提交換掉,隨即用一般方式找回,沒有蓋掉別人的工作。8月14日改C 站資料時,有三次操作連帶觸發A 站的正式部署,都在動到網站前被取消。8月10日的磁碟清理裡,我們做了核准範圍明講排除的一個動作,事後查核沒有資料損失,但確實越界。

磁碟整週都在邊緣。8月10日凌晨空間掉到連暫存檔都寫不出來,當時有8個工作階段在跑、連基本指令都執行不了,分批回收後回到77.1GB,其中一批就回收約54GB;根因是每個新任務都建一份完整工作複本、裝好依賴,做完沒人回收,7月31日才清出的36GB在9天內用同樣方式吃光。8月11日又兩度逼近用盡,最低剩910MB與269MB。8月14日再做一輪保守清理,只碰13個確定可重建的暫存資料夾,可用空間回到21.6GB。

量過才算數

這週最能直接搬去自己工作上的,是一個問句:你手上那些「檢查通過」的訊號,拿什麼當比較基準?過期的基準會同時製造假警報和漏報,而假警報比漏報更貴,它會訓練你忽略警報。第二件是把「做好了」和「讀者看到了」當成兩件事:中間至少隔著部署、網域指向與快取,任何一層錯掉,前面所有驗證都不算數,而且通常不會亮紅燈。

第三件是檢查本身也會壞。這週抓到的三個壞檢查——拿舊快照當基準的閘門、寫死固定答案的狀態欄位、把本機預覽快照當成線上現況的稽核——共同點是它們都回報正常。除了問有沒有通過,還要偶爾故意弄壞一次,看它會不會叫。

8月16日第一次做搜尋排名觀測時,同一套紀律往外用了一次:50個關鍵字裡,31個判定被官方或高權威網站占滿版面,13個因結果筆數不足被判為證據不足,不硬給結論;天氣類的25個關鍵字有21個被官方氣象單位與國際氣象平台占滿。同一批資料也有意外:A 站的網域權威分數只有1分,卻已經在自助加油站排第4,附近加油站與好市多加油站排第9,自助加油省多少排第10。願意在證據不足時說證據不足的系統,報出來的好消息才有重量。

相關事件報告

這一週的每日日誌