數位下載:持久化修復及歷史訂單自動交付

2026年9月13日

今天我們修復了一個導致部分數位下載檔案在伺服器更新後消失的錯誤 —— 同樣重要的是,我們確保賣家(重新)上傳檔案的瞬間,買家就能自動獲得存取權限。

發生了什麼事

一些買家在 我的下載 中點擊下載按鈕時看到 「file not found on disk」(磁碟上找不到檔案)——儘管他們的訂單已付款且下載項目存在。

技術原因

我們的遊戲服務在每個區域 VPS 上的 Docker 容器中運行。上傳的下載檔案會寫入 /var/lib/erleuchtung/shop-downloads —— 這本應是主機伺服器上的持久資料夾,掛載到容器內部。

這個掛載在我們的開發配置中存在,但在更新代理安裝到 VPS 節點的部署 compose 檔案中缺失了。結果,上傳的檔案被儲存在容器自身的檔案系統層中。每當更新重建容器時,該層就會被捨棄 —— 檔案消失,而資料庫記錄(儲存在 PostgreSQL 中)保留了下來。

結果是:一個有效的下載項目指向了一個不再存在的檔案。

我們修復了什麼

  • 所有節點的持久儲存。 下載目錄現在已正確掛載到所有區域伺服器(US、IN、EU2、SG 以及我們的 MAAS 預發佈節點)的主機儲存上。上傳的檔案可以在更新和容器重建後存活。
  • 上傳時自動回填。 以前,下載權限只在付款時授予 —— 且僅針對當時存在的檔案。現在,當賣家向產品上傳檔案時,它會自動授予該產品的所有已付款訂單買家,並附帶即時通知。
  • 自癒下載清單。 開啟「我的下載」現在會修復您所有已付款訂單缺失的權限 —— 舊訂單會自動恢復。
  • 發貨時授予。 當賣家將訂單標記為已發貨/已交付時,附加檔案會立即授予 —— 數位商品在交付時即應提供。

賣家需要做什麼

在此修復之前上傳並在更新中遺失的檔案無法復原 —— 它們只存在於已被捨棄的容器層中。

如果您之前上傳過檔案: 開啟您的產品,刪除過期的下載項目,然後重新上傳檔案。在您上傳的那一刻,所有歷史買家將自動恢復存取權限 —— 無需手動操作。

關於透明度的說明

你們中一些人收到的「已發貨」通知郵件提到了可下載檔案,但實際上從未附加過任何檔案 —— 那段文字是賣家的發貨備註,而非檔案交付。從此版本開始,「我的下載」中的下載按鈕是唯一可信的依據:如果檔案列在那裡,它就存在於伺服器上並且可以下載。

感謝大家的耐心等待 —— 特別感謝迅速回報問題的社群成員。

— Erleuchtung 團隊