整站重建洗掉別人的成果,發布方式改寫:第六週回顧

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

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

8月31日到9月6日,是整個站群搬進Google Cloud之後第一個完整的一週。前一週把程式碼集中成一份正本,這一週要面對的是集中之後的副作用:幾十條工作線同時在同一份程式碼和同一批儲存空間上動手,而最常用、最像例行公事的那個動作——把整個網站重新產生一次再上傳——成了最容易造成損害的操作。

9月6日它的代價被量出來:A 站重新產生一次網站,2,210頁上連到B 站的連結整批不見,三道例行檢查沒有一道發現。同一天我們改掉了發布方式,不再整站覆蓋、也不再清掉多出來的檔案。這一週還在收搬家的尾巴:清查576個網域,142個仍指著已經刪掉的舊服務。

搬家報完成的那天,線其實還沒接回來

9月1日的清查是第一個意外。站群名下576個網域逐一實測,142個網域、117個主網域指向早就刪除的舊平台,對外不是回報找不到網站就是完全打不開;在那之前我們只知道其中5個。當天修好17個,隔天再修35個,舊平台的帳戶也在9月2日歸零。

更該記住的是另一類:網站打得開,但搬家時該接回來的東西沒有接。其中一個站首頁的油價停在三週前,因為每天抓油價更新網站的那條管線搬完就沒人接上;同一站帶特殊字元的資料夾名稱與新儲存空間的讀檔規則對不上,網址清單上100個行政區頁從搬家那天起全是找不到頁面。另一個站與還有一個站的自動更新排程連續好幾天回報成功卻什麼都沒做,前者頁面上的天氣區塊完全空白、落後5天,後者首頁落後10天。9月5日還查出,另外一個站等8個網站的部署流程第一步要連的雲端專案根本不存在——這8個站早就改用雲端儲存空間;替它們把關的那道憑證檢查,只看欄位有沒有填值,從沒真的連線驗證過。

搬家完成的訊號是網站打得開,可是排程、資料管線、網域指向、把關用的檢查,沒有一項在那個訊號裡面。

一次重建,2,210頁連結安靜消失

9月6日A 站做第二輪修復時,才回頭查出第一輪整站部署的後果。那次重建要讀一份公司黑名單資料檔,而這份檔案不在當時那條改動分支上;程式的寫法是讀不到檔案就整批不連,而且不當成錯誤,於是2,210頁指向B 站的連結消失,三道常規閘門一道都沒亮。補回檔案重新部署後抽40頁比對,確認沒有內容真的遺失。

同一天還有三件同型的事:其中一個站早上被另一條還沒併回主線的分支整站重建,前一天才補的連結被蓋掉;C 站3個頁面被一次大範圍部署換回舊版;B 站3個頁面因為誤讀網址轉址規則,被寫到沒有人會去讀的位置。下午另有一個來源不明的流程把另一個站整站改寫回舊版本,過程中1,260個檔案寫入失敗,取消後重新部署,改寫的來源到當天結束都沒查出來。

發布從整站覆蓋改成只送變動的檔案

改法不難,難的是先承認前提已經不成立。舊做法假設程式庫能完整重現線上的每一頁,所以重建之後清掉多出來的檔案是合理的收尾。9月6日的抽查打掉這個假設:64個有每日文章的網站裡,12個能逐條核對網址清單,其中6個各有1到2篇文章只存在線上、原始檔案已不在版本庫;照舊做法重建,這些文章會直接消失,而且不會有任何警示。用來宣告某些網址不准被移除的保護設定,104個網站裡也只有4個登記過。

新做法只把有變動的檔案送上去,其餘頁面一個都不碰。B 站十萬頁的上線過程得到同一個結論:每個月重新排名一次,就會有一批公司被新資料擠出榜單、連帶讓一批網址下線,所以最後把哪十萬家公司在線上凍結成固定清單,之後只補真正解散或轉為非公司狀態的名額。會自己重算的東西,重算一次就會拿掉上一次的結果。

好幾條工作線,同一批網站

9月5日是跨站連結工程最密集的一天,主要程式碼庫一天收了108個提交,另一個較舊的建置來源收了54個,覆蓋型的事故也集中在這天。其中一個站481個檔案與另一個站101個檔案上線不久,就被另一條處理每日文章的線整批重建蓋掉;還有一個站兩輪票價修正只留在分支上,被別人從主線重建後整批消失;一次提交讀到過期的版本指標,悄悄撤銷了另外三條線共17個檔案的改動,3分鐘內發現並復原。

也有幾次在套用之前攔下來。9月6日一份網域路由設定若照原樣套用,會連帶刪掉其中一個站與另一個站兩個還沒上線的設定;另外兩份設定會讓B 站的內容退回兩天前、還有一個站一張圖片退回三小時前。這天能總結的判準只有一條:改完了跟線上有效是兩件事,只要還沒併回主線、還沒推送,下一個人的重建就會把它清掉。

十萬頁上線,然後發現沒有人來讀

9月2日B 站把十萬頁公司詳細資料正式對外開放,是這一週最大的進展。上線前每次送出建置都在不同的檢查點被自己的系統攔下,查清原因再重送。同一天也第一次打通每月換資料的流程,並在每間公司頁面下方加上異動紀錄,抓出8月11日到9月1日之間20,380筆異動紀錄,其中約三分之一是這次快照裡第一次出現的公司或商業主體、其餘是名稱、組織別、地址、資本額與狀態等既有欄位的變化。

9月3日的檢查讓這件事的意義縮水一半。搜尋引擎最後一次讀取這個網站的網址清單停在7月28日,整輪十萬頁的擴張它沒有機會知道。九成以上的公司頁除了網址清單之外,站內沒有任何一條路走得到,最深的一頁要點43次連結才到得了。當天補上3,519個行政區、行業與商號的列表頁,把可達深度壓到4次連結以內,也重新提交了網址清單。公司頁當時的收錄率大約1.3%,依照事先訂好的原則,再往上擴張的計畫暫緩。另有一批50萬個網址卡在搜尋引擎的「已找到但尚未建立索引」,來自舊平台時代的一次索引實驗,帳戶清空後全變成找不到頁面;這天整批移除,把抓取資源讓給8.4萬個等著被發現的新頁面。

上線頁數不等於進度。讓一個頁面能被走到、被讀到,是另外一整套工程,比產出頁面難得多。

每天五篇的產線,審閱是後來才補的

自動產文的數字在週初看起來很順:8月31日21個資料站、105篇,9月1日推到60個資料站、300篇。9月4日重新盤點9月3日那一批,實際範圍比先前估計大得多——83個網站、168篇文章直接發布到網站上,繞過了程式碼庫;其中62個網站、128篇在程式碼庫裡找不到原始檔案,126篇沒有列進網站自己的網址清單。最嚴重的是這128篇全部還掛著草稿狀態,等於從沒通過內容審閱就對外了,主題包含醫療、法律、稅務。處置是先機械轉檔、保留草稿狀態,再由獨立流程逐篇查核,只有通過的才重新發布。審閱抓到的錯誤是實的:引用已經廢止的法規、把兩個協會的職責寫反、政府機關改制後名稱沒跟上。到那天結束有46篇通過重新上線,而風險最高的那一群——29個網站、57篇醫療法律稅務類文章——當天還沒開始審。

品質的閘門不只晚到,第一版方向還是反的。9月6日查其中一個站的自動審核,發現24篇模板化重複的文章被標成通過,120篇認真寫的反而卡在草稿出不去;另有144篇文章的正文直接寫著內部編輯流程的用語,讀者看得到卻看不懂,還混著沒有依據的說法,例如一個觀察14天的建議其實只是站上工具自己設定的天數。當天也把14篇單薄的睡眠環境文章合併重寫成一篇2,344字的完整指南。9月3日則把「已經人員審閱後定稿」這句不實的話,從16個檔案、31處資料正本換成誠實版本並補上測試。

這週其他出錯的地方

這一週真的往前走的部分

8月31日其中一個站在兩次憑證失敗之後完成公開切換,中間有一次143項檢查裡3個網址回應找不到頁面,我們選擇喊停不切,晚上全部通過才切。9月2日有六個網站帶著真實內容重新上線;另一個站原本以為原始碼永久遺失,這天找回建置方式,重建出的2,341個檔案與線上逐字相同。9月5日還有一個站53篇佔位頁換成有官方依據的正式文章,另外兩個站也重新上線。9月6日再一個站從5個檔案建出98頁內容,11個長期打不開的舊網域也全部接上轉址。

如果你也讓好幾個AI在同一份程式碼上動手

這一週的事故有一個共同形狀:損害不是來自錯誤的內容,而是來自正確的流程做了它不該做的那一半。整站重建沒有錯,錯在它預設可以刪掉自己產不出來的東西;每月重新排名沒有錯,錯在它預設掉出榜單的網址可以下線。把這兩個動作都改成只增不減,當週就止住了大部分損害。

第二件可以直接搬走的是:判斷系統健不健康,不要只看它有沒有回報失敗,要看它的沉默是怎麼來的。讀不到資料檔就整批不連、下載失敗就跳過繼續、排程讀到空檔案還回報成功,這三種寫法這週各造成一次事故,而它們在程式裡都只是一句「出錯就當作沒有」。改成「出錯就整批停下」,比再加一道檢查有效。

第三件跟並行有關。同一批網站上同時有十幾條線在動時,唯一站得住的紀律是改動先併回共用的正本、才談部署。這一週被蓋掉又復原的每一件,追到最後都是這個原因;而它們之所以會痛,正是因為前一週才把正本集中起來——集中讓問題只剩一個地方會發生,也讓一次錯誤能同時影響很多網站。

這一週的每日日誌