本文為 Serverless 社區成員撰稿,作者云洋,從事資訊管理作業,多年電子政務資訊系統建設管理經驗,對 Serverless 技術和架構有濃厚興趣,
這個假期挺長的,不過有幸在騰訊云 Serverless 在線直播里看到了 Serverless 的相關課程,從第一期學完,還是憑添了很多學習樂趣,
前面三節課學了一些 Serverless 的基本知識和架構特點,也跟著開發部署,其實都蠻有趣的,唯一就是都沒有管理后臺,第四期課程很好的彌補了這一不足,劉宇老師給大家帶來的專案 Python+HTML 的動態博客,后臺是基于 Flask 的,雖然我不太熟悉這個框架,但是老師給提供了課程的原始碼,所以可以先用后學,
-
這節動態博客的直播回放地址是:
https://cloud.tencent.com/edu/learning/live-1926
-
劉宇老師的專案的 Github 地址是:
https://github.com/anycodes/ServerlessBlog
直播那天我提前準備好手機和電腦,就進教室了,不過當天課程收到網路的干擾很大,一直很卡,后來劉老師重新錄制了課程,據說錄到凌晨兩點,這一點必須點贊,敬業精神太感人啦,在老師的熱情帶領下,我們的學習勁頭也是十足的啊,
我的學習路徑可謂十分曲折,整整折騰了三天,不過最后終于實作了專案的成功部署,很開心!
整體來說,其實專案部署就是四個步驟:
- 下載源檔案
- 執行init.py
- 修改 serverless.yaml 檔案
- sls --debug 部署到云端,
我在每一個步驟都踩過坑,我基本上按照順序把坑和解決方案列出來,感興趣的同學可以基于上面的鏈接嘗試開發部署,如果遇到相關的坑,可以對照參考,
坑一:Git 下載報錯
Git下載報錯,錯誤資訊是這樣如下:
remote: Counting objects: 100% (1438/1438), done.remote: Compressing objects: 100% (1100/1100), done.error: RPC failed; curl 18 transfer closed with outstanding read data remainingfatal: The remote end hung up unexpectedlyfatal: early EOFfatal: index-pack failed
百度之后,發現針對RPC錯誤需要修改Git的buffer,調到700M后依然報了上面的fatal錯誤,和網路有關,最后放棄用git,選擇老師發在檔案里的壓縮包,地址上面列出來了,大家可以去自行取用,
坑二:pip 的源設定和 pymysql
部署程序中因為 init.py 里面用到了 pymysql,可是我沒有安裝,于是打開Anaconda Prompt 開始用 pip 安裝,然而 pip 好像死了一樣,完全沒有反應,最后報錯說找不到包,后來經同學和老師提醒,修改 pip 的源到國內,我用了清華的源,速度一下很快啊,安裝成功,修改源的代碼是:
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
如果大家需要安裝其他包,就把 pymysql 換成要安裝的包,
但是 init.py 依然報錯,于是就吧 pymysql 的包放在專案目錄中,解決了問題,
坑三:yaml 沒有 FullLoader 屬性
init.py 的執行一致不順利,pymysql 的坑填完后繼續報錯,

于是以為自己沒有安裝對 yaml,后來老師建議刪掉該陳述句,大家要注意,這個陳述句里 Fullloader 出現在一個逗號后面,所以我們只刪掉逗號后面的 loader=yaml.FullLoader 就好了,
坑四:資料庫連接
其實如果用老師提供的測驗庫的話,這個坑就不是問題,但是我覺得那么多同學做作業,老師的庫壓力會很大,正好我自己買了一個騰訊的云資料庫是 MySql的,可以直接拿來用,
于是我就天真的把資料庫地址改成了自己的,以為它可以連上,但是連接超時,于是我有把用戶和密碼改成自己的,結果還是拒絕訪問,一直到我去云資料庫控制臺去測驗連接,才發現原來我的資料庫埠沒有寫對,
云資料庫的外網鏈接設定還是很方便的,這次作業讓我還進入了 PMA,進行了在線資料庫操作,挺好用的,到這里,init.py 的坑就填平了,我看到新建資料庫的成功,
坑五:網路問題
這個坑有點深,我在里面爬了兩天才爬出來,而且之所以爬出來,完全是因為換了網路哦,
不得不說移動的家庭寬帶真的不給力啊,Git 連不上,部署函式總是斷線,我之所以在這個坑里沒有很快出來,還有一個原因,就是每次的報錯資訊不一樣,這深深的吸引了我,
我的報錯資訊五花八門,給大家分享一下:

這個錯誤出現的原因其實也很難想通,因為給的資訊太少,并不知道到底是哪里有問題,后來還報過一個類似的錯誤,印象里是說讀不到 'admin_add_article',我后來發現 git 上面又更新了一個檔案夾 picture,里面有這個名字對應的圖片,所以我就重新 git clone 了專案檔案,把picture檔案夾拷貝了過來,


這類 443 的錯誤,我是一直沒有解決啦,直到我更換了網路,不過大家可以看到上面有一個存盤桶的部署資訊,那個桶不是我的,

關于 InvalidParameterValue 不太理解,什么樣的 ID 是合法的呢?我考慮應該是網路中斷丟失了資料,導致有些字符沒了,

ECONNRESET 這個錯誤報了很多次,具體是什么意思不太明白,socket hang up應該還是網路不通暢吧,

還有一個是超時了,估計是網路情況不好,

這個 undefined RequestId 也是出現了多次的錯誤,很奇特,估計是網路資料丟包造成的吧,
以上所有的問題都是網路問題,解決方法:同學們提醒我不要部署到 hongkong 區域,可能海外服務器會有網路不穩定的情況,于是我換到了beijing,依然不行,我還換到多 guangdong,網路錯誤依然不斷,
這個網路問題引發了我的不少猜疑啊:比如,我是不是頻繁部署系統被封IP了?是不是防止勒索病毒,443埠封閉啦?我家的寬帶是不是該換運營商了?
顯然最后一個猜疑是并確認了的,我利用手機資料流量包部署系統就很快,240s 左右解決問題,
這里面其實報錯資訊不是很友好,首先,我不知道具體到哪一個檔案的時候網路斷開的,所以我不能肯定是不是某一個檔案有問題,如果這時候能夠定位一個斷開的時候處理在哪一個檔案,會對用戶更有幫助,
而關于那個存盤桶,應該是老師的,因為后來在部署成功的一次我在資訊里看到了從老師的存盤桶里上傳了代碼到一個存盤桶里,而我在自己的存盤桶串列里看到了那幾個桶,
之所以有幾個,是因為我換過幾個區來部署,有一些程式老師可能部署在他的桶里,這樣是不是省我們的流量呢?也可能是為了部署 Flask Admin 的程序更加平順,老師把一些依賴部署到了線上的桶里,
記得上節課的老師也用了 Flask,他說 Flask 需要對應 Python 的精確版本,我們每個人的版本可能都會有些細小差別,造成部署程序的顛簸,老師為了避免這種狀況,就額外處理了,老師,您用心啦!
坑六:UploadPicture
因為每次網路問題都發生在部署uploadPicture這個部分,時間很長,所以我都會忍不住cancel重來,

于是這個部分后來被我注釋掉了,注釋之后,部署很順利,因為換用了手機的網路,這突如其來的順利讓我覺得 uploadPicture 可能是無罪的,我應該把它放回來,于是我就取消了注釋,這時候災難發生了,10000s 之后它還在部署,
我很好奇,為什么這個部分這么特殊,于是我打開一些 uploadPicture 的源檔案來看,發現在 demo.py 里面有很多設定和我們的 global 設定不一樣,于是我開始七七八八的修改起來,然而,老師說那個檔案不在全域發揮最用,只是qqcloud_cos 這個依賴的一個 demo,于是我又改了回去,
后來,有同學說清空存盤桶可以解決這種超長時間部署的問題,于是我試了一下,恩,真的管用哦!感謝同學的提醒,
PS:我后來回想很可能就是缺少 picture 那個檔案夾吧,我猜測部署的程序可能會跑有些 test 程式,檔案的代碼會被執行,而如果里面的引數讀取不到就會一直停在那里,
坑七:后臺無法使用
部署成功之后,我訪問后臺,發現只有登陸頁可用,其他頁面基本上一點就報錯,Internal error,在老師的提示下,我到了函式的控制臺,查看了Blog_Admin的報錯資訊,發現是資料庫連接不到,


可是我之前明明在資料庫里新增資料的,于是我打開了 serverless.yml 檔案和資料庫里的庫名稱對照, 發現資料庫的名稱多了一個字母 l,哎,粗心啊粗心,修改了 yaml 檔案后再次部署,成功了!
應該說控制臺的日志挺詳細的,我覺得如果能把成功資訊和報錯資訊在顏色上區分一下就更好啦,目前看來是用時間戳來區分的,不過有時候請求多起來,很多正確和報錯資訊在一起,找起來很麻煩啊,要是有豐富一些的查詢選項也許更好用,
最后,我終于跳過了這些坑,上了岸!
部署成功后的頁面如下:http://blogdemo-1253166145.cos-website.ap-beijing.myqcloud.com/
于是,我帶著劉宇老師布置的作業來投稿,資訊化資產復用最大化,感覺是一次非常開心的學習體驗!
傳送門:
- GitHub: github.com/serverless
- 官網:serverless.com
歡迎訪問:Serverless 中文網,您可以在 最佳實踐 里體驗更多關于 Serverless 應用的開發!
推薦閱讀:《Serverless 架構:從原理、設計到專案實戰》
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/33969.html
標籤:其他
下一篇:NAT實作方式
