淺羽的團隊內部啓用 WeKan 作爲 Trello 的替代品管理項目進度和日程。早晨經過 Dimlao 的一番操作,Board 的內容突然無法正常顯示。嘗試更新、重啓 App 甚至修復 MongoDB 都無效。在我們都快放棄、準備重建整個 Board 的時候,通過扒 GitHub 的 Issue,發現在 #1768 和 #1703 中有提到:
Same issue here – when you move a card with a custom field to a board without the custom field, the target board is not longer loading.
一陣沉默後,Dimlao 說道:
…… 等等,是不是因为我删除了那个 custom field ……
之前的一些 Card 確實有加入過 Custom Field,但是因爲需要手動在所有卡片中加入太過於麻煩,最後放棄不用了。於是 Dimlao 遵循正常人類的邏輯,在沒有清理乾淨卡片的情況下,直接刪除了 Custom Field,導致慘劇的發生。
(後面還有:覺得還可以再搶救一下)
那怎麼辦?修資料庫吧。先開一個 Mongo,然後看看所在的資料庫並且選擇它:
> show dbs
local 0.000GB
wekan 0.002GB
>use wekan
switched to db wekan
接下來需要做的事情很簡單:找到被刪除的 Custom Field,並且把它從 Card 記錄寄刪除掉。WeKan 裏都是按照 id 來記錄的,所以需要先去查到 Custom Field 的 id,然後查找有 customFields 的 id 匹配的 Card 並且刪掉記錄。
> show collections
accountSettings
activities
announcements
boards
card_comments
cards
cfs._tempstore.chunks
cfs.avatars.filerecord
cfs_gridfs._tempstore.chunks
cfs_gridfs._tempstore.files
cfs_gridfs.avatars.chunks
cfs_gridfs.avatars.files
checklistItems
checklists
customFields
esCounts
invitation_codes
lists
meteor-migrations
meteor_accounts_loginServiceConfiguration
meteor_oauth_pendingCredentials
presences
settings
swimlanes
unsaved-edits
users
按照 WeKan 的資料結構,customFields 集合裏應該就是所有的 Custom Fields 了。然而因爲 Dimlao 已經刪掉了,所以並查不出東西;不過這時候還可以查 Card 裏有哪些記錄,刪掉就是了。
> db.cards.find()
.... , "customFields" : [ { "_id" : "77DLjmk5dN5PnGLEP", "value" : "ZkBnfb" } ],
"listId" : "6bX74x2s5NTnFpbDQ", "boardId" : "BudzemLxvCxQamTC4", ....
這裏可以得到兩個很重要的訊息:Card 的 Custom Field ID 和 Board 的 ID。接下來指定這兩個 ID 去刪掉 Card 關聯的 Custom Field:
> db.cards.updateMany({boardId:"BudzemLxvCxQamTC4","customFields._id":"77DLjmk5dN5PnGLEP"},{$unset:{customFields:{ "_id" : "77DLjmk5dN5PnGLEP", "value" : "ZkBnfb"} } })
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
重新整理看板,就可以顯示出應有的內容了。就是不知道 WeKan 什麼時候官方解決一下這個問題。
發佈留言