BACKEND升級大作戰

追趕潮流的一役

Posted by silau on September 18, 2019

早幾年使用Python,總要在2.0跟3.0之中選一個,現在的新用戶就幸福了,一來就是3.0不用愁。但新科技就是這樣,短時間就要改朝換代,不但版本號一直升,更多好用的新框架新技術也一直在推陳出新。

上年幫公司起server的時候,Django主流版本還是1.x,目前最新已經是2.2.5。同時隨著Docker社群的成熟,大家對容器化的技術也玩得越來越溜了,在壓縮image size方面無所不用其極,當中最常採用的就是Alpine Linux核心,體積更細,效果更好。 可惜Alpine跟Python某些package相性不太好,特別是數據運算相關的pandas,,numpy。當時費盡九牛二虎之力是將所有環境在docker內配置好了,還以為可以一勞永逸。

最近想將GraphQL加到backend的架構之上,單純要加的話也不難,但看了一下推介配置,嗯,不出奇是Django 2.x。另一邊廂Cookiecutter也是一直追趕潮流,Django升上來了,Celery也更新了,還送了很方便的flower跟aws-cli,以後查看cron job結果跟備份資料庫就簡單了。

不如一併來個大升級吧?但是與之相關的yml跟env的文件格式也跟著變了。考慮到眾多library都有過期的風險,加上舊版celery各種奇怪bug,來吧,來一個大upgrade吧!

要更新的內容有這幾個大項:

  1. 裝有環境的Dockerfile
  2. Django版本
  3. Cookiecutter提供的各種工具

Dockerfile的upgrade算是比較簡單,也沒有dependency的問題,只要加新python, numpy, pandas的版本,應該先做。

其次是Django版本的升級,由1.11提升到2.2.5是breaking change,加上有好幾個config file要大改,特別是url文件。參考資料點我

最後是最複雜又最危險的其他各項工具,當中celery有機會因為Django版本upgrade而出現不一致情況,而即使接軌成功,語法亦可能有變,最後要注意的是yml跟env文件的寫法要保持前後一致。

計劃完就開始工作了。