最近在把即將關閉的 parse 搬到 open source 的 parse server 紀錄一些踩到的雷 XD
資料轉移
parse 官方本來就有匯出的功能,然後因應關閉,又有另外一個 Migrate to external database 幫你把資料轉到 外部的 mongodb 上面。
但是轉移的功能有限制 mongodb 的版本,結果我要轉移的資料庫版本太新,不讓我轉 -_- GG ,mongodb 好像只支援 2.6 or 3.0 吧,沒注意就裝了 3.2 … OMG。
所以就算了自己匯出再匯入吧
Parse Server
Parse Server 本身是一個 nodejs 模組,你需要自己按照 example 寫出一個實際能用的 server 來跑。
如果你需要多個 app,那就要自己想辦法拆成不同的 path or port 來做,因為這個 project 目的跟官方要提供的服務目的不同,
是一個復刻版,甚至有很多功能還沒做完 EX:event tracking
_Installation 404
實際上線以後 server 負載超高原因不明,所以就先幫 parser server 裝個 morgan 來看一下 access_log。
發現超多 android 的 app 在升級完成後發出 POST _Installation 的 request 回應都是 404,而且不停重試,直到把 server 打掛為止。
結果是因為用匯出再匯入的資料 _id 跟 parse server 的資料結構不同。
匯入的資料長這樣
{ _id: ObjectId("..."), objectId: $objectId }
parse server 新增的長這樣,對就是 objectId 本人
{ _id: $objectId }
所以他 android 要更新資料(用 POST??) 就找不到原本舊的 _Installation 就失敗了,把這結構修好就沒錯了。
dashboard
現在的 parse-dashboard 出到 1.0.14,結果連發過的 push 歷史紀錄都還不能看XD,react 前端好像有個小 bug 顯示不出來。
可以自己建一個 _PushStatus 的 SCHEMA 就能在 dashboard 裡面看這個 collection 的資料了,只是 opened event 看起來還沒有存在任何地方。
event
沒有 event 但是想看 event 怎麼辦?
自己在 index 掛一個 middleware 監聽 event 事件,存到自己的資料表。
metabase
最後這一堆資料要怎麼看勒?官方的 dashboard 有一堆圖表能分析,但是現在什麼ㄆ都沒有,所以我自己去找了一些 BI 的 solution。
最後找到 metabase,可以用 docker 很快的裝起來就能跑了,接下來把 database connection 指到 parse 的 mongodb 上。
他的設計就是有一個 questions 的 tab,讓你可以對資料庫問問題,一個問題就是你想篩選什麼資料,以什麼欄位群組,聚合函式是什麼(加總,不重複值..)。
我主要的需求都是我把 event 存起來後去分析一些 app 使用的狀況,看有沒有異常,跟原本官方 parse dashboard 提供的功能類似,結果如下,還蠻精緻的。
push_hash
在追蹤 push 開啟事件的時候,也發現 android 的 push 一直無法追蹤到,研究 SDK 以後發現,每一則 push 原生的 parse 都會多帶一個 push_hash 的參數發給 client,結果在 OpenSource 的的版本中 android 這件事沒有做,也或許是因為 event 的相關功能都還沒做完吧。
所以我就在發 android 的 push 時把 query md5 後自己加到 push 的 payload 內了,這樣 android 的 parse sdk 就會把正確的 push 開啟事件發回伺服器了。