Serverless 动态博客开发趟“坑”记

本文为 Serverless 社区成员撰稿。做者云洋,从事信息管理工做,多年电子政务信息系统建设管理经验,对 Serverless 技术和架构有浓厚兴趣。html

这个假期挺长的,不过有幸在腾讯云 Serverless 在线直播里看到了 Serverless 的相关课程,从第一期学完,仍是凭添了不少学习乐趣。mysql

前面三节课学了一些 Serverless 的基本知识和架构特色,也跟着开发部署,其实都蛮有趣的,惟一就是都没有管理后台。第四期课程很好的弥补了这一不足。刘宇老师给你们带来的项目 Python+HTML 的动态博客,后台是基于 Flask 的,虽然我不太熟悉这个框架,可是老师给提供了课程的源码,因此能够先用后学。git

直播那天我提早准备好手机和电脑,就进教室了,不过当天课程收到网络的干扰很大,一直很卡,后来刘老师从新录制了课程,听说录到凌晨两点,这一点必须点赞,敬业精神太感人啦。在老师的热情带领下,咱们的学习劲头也是十足的啊。服务器

个人学习路径可谓十分曲折,整整折腾了三天,不过最后终于实现了项目的成功部署,很开心!网络

总体来讲,其实项目部署就是四个步骤:架构

  1. 下载源文件
  2. 执行init.py
  3. 修改 serverless.yaml 文件
  4. 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 的坑填完后继续报错。

img

因而觉得本身没有安装对 yaml,后来老师建议删掉该语句,你们要注意,这个语句里 Fullloader 出如今一个逗号后面,因此咱们只删掉逗号后面的 loader=yaml.FullLoader 就行了。

坑四:数据库链接

其实若是用老师提供的测试库的话,这个坑就不是问题,可是我以为那么多同窗作做业,老师的库压力会很大,正好我本身买了一个腾讯的云数据库是 MySql的,能够直接拿来用。

因而我就天真的把数据库地址改为了本身的,觉得它能够连上,可是链接超时,因而我有把用户和密码改为本身的,结果仍是拒绝访问,一直到我去云数据库控制台去测试链接,才发现原来个人数据库端口没有写对。

云数据库的外网连接设置仍是很方便的,此次做业让我还进入了 PMA,进行了在线数据库操做,挺好用的。到这里,init.py 的坑就填平了,我看到新建数据库的成功。

坑五:网络问题

这个坑有点深,我在里面爬了两天才爬出来,并且之因此爬出来,彻底是由于换了网络哦。

不得不说移动的家庭宽带真的不给力啊,Git 连不上,部署函数老是断线。我之因此在这个坑里没有很快出来,还有一个缘由,就是每次的报错信息不同,这深深的吸引了我。

个人报错信息五花八门,给你们分享一下:

img

这个错误出现的缘由其实也很难想通,由于给的信息太少,并不知道究竟是哪里有问题。后来还报过一个相似的错误,印象里是说读不到 'admin_add_article',我后来发现 git 上面又更新了一个文件夹 picture,里面有这个名字对应的图片,因此我就从新 git clone 了项目文件,把picture文件夹拷贝了过来。

img

img

这类 443 的错误,我是一直没有解决啦,直到我更换了网络。不过你们能够看到上面有一个存储桶的部署信息,那个桶不是个人。

img

关于 InvalidParameterValue 不太理解,什么样的 ID 是合法的呢?我考虑应该是网络中断丢失了数据,致使有些字符没了。

img

ECONNRESET 这个错误报了不少次,具体是什么意思不太明白,socket hang up应该仍是网络不通畅吧。

img

还有一个是超时了,估计是网络状况很差。

img

这个 undefined RequestId 也是出现了屡次的错误,很奇特。估计是网络数据丢包形成的吧。

以上全部的问题都是网络问题,解决方法:同窗们提醒我不要部署到 hongkong 区域,可能海外服务器会有网络不稳定的状况,因而我换到了beijing,依然不行,我还换到多 guangdong,网络错误依然不断。

这个网络问题引起了个人很多猜疑啊:好比,我是否是频繁部署系统被封IP了?是否是防止勒索病毒,443端口封闭啦?我家的宽带是否是该换运营商了?

显然最后一个猜疑是并确认了的。我利用手机数据流量包部署系统就很快,240s 左右解决问题。

这里面其实报错信息不是很友好,首先,我不知道具体到哪个文件的时候网络断开的,因此我不能确定是否是某一个文件有问题,若是这时候可以定位一个断开的时候处理在哪个文件,会对用户更有帮助。

而关于那个存储桶,应该是老师的,由于后来在部署成功的一次我在信息里看到了从老师的存储桶里上传了代码到一个存储桶里,而我在本身的存储桶列表里看到了那几个桶。

之因此有几个,是由于我换过几个区来部署。有一些程序老师可能部署在他的桶里,这样是否是省咱们的流量呢?也多是为了部署 Flask Admin 的过程更加平顺,老师把一些依赖部署到了线上的桶里。

记得上节课的老师也用了 Flask,他说 Flask 须要对应 Python 的精确版本,咱们每一个人的版本可能都会有些细小差异,形成部署过程的颠簸,老师为了不这种情况,就额外处理了。老师,您用心啦!

坑六:UploadPicture

由于每次网络问题都发生在部署uploadPicture这个部分,时间很长,因此我都会忍不住cancel重来。

img

因而这个部分后来被我注释掉了。注释以后,部署很顺利,由于换用了手机的网络。这突如其来的顺利让我以为 uploadPicture 多是无罪的,我应该把它放回来。因而我就取消了注释,这时候灾难发生了,10000s 以后它还在部署。

我很好奇,为何这个部分这么特殊,因而我打开一些 uploadPicture 的源文件来看,发如今 demo.py 里面有不少设置和咱们的 global 设置不同,因而我开始七七八八的修改起来,然而,老师说那个文件不在全局发挥最用,只是qqcloud_cos 这个依赖的一个 demo,因而我又改了回去。

后来,有同窗说清空存储桶能够解决这种超长时间部署的问题,因而我试了一下。恩,真的管用哦!感谢同窗的提醒。

PS:我后来回想极可能就是缺乏 picture 那个文件夹吧,我猜想部署的过程可能会跑有些 test 程序,文件的代码会被执行,而若是里面的参数读取不到就会一直停在那里。

坑七:后台没法使用

部署成功以后,我访问后台,发现只有登录页可用,其余页面基本上一点就报错,Internal error。在老师的提示下,我到了函数的控制台,查看了Blog_Admin的报错信息,发现是数据库链接不到。

img

img

但是我以前明明在数据库里新增数据的,因而我打开了 serverless.yml 文件和数据库里的库名称对照, 发现数据库的名称多了一个字母 l,哎,粗心啊粗心。修改了 yaml 文件后再次部署,成功了!

应该说控制台的日志挺详细的,我以为若是能把成功信息和报错信息在颜色上区分一下就更好啦,目前看来是用时间戳来区分的,不过有时候请求多起来,不少正确和报错信息在一块儿,找起来很麻烦啊。要是有丰富一些的查询选项也许更好用。

最后,我终于跳过了这些坑,上了岸!

部署成功后的页面以下:http://blogdemo-1253166145.cos-website.ap-beijing.myqcloud.com/

因而,我带着刘宇老师布置的做业来投稿,信息化资产复用最大化,感受是一次很是开心的学习体验!


传送门:

欢迎访问:Serverless 中文网,您能够在 最佳实践 里体验更多关于 Serverless 应用的开发!


推荐阅读:《Serverless 架构:从原理、设计到项目实战》

相关文章
相关标签/搜索