{"componentChunkName":"component---src-templates-blog-detail-tsx","path":"/blog/2020-03-12-blog-issues","result":{"data":{"currentBlog":{"id":"55953085-8519-57ce-bf38-6f3a36d113c3","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020318/1584508229341-blogging.jpg","authors":["云洋"],"categories":["user-stories"],"date":"2020-03-12T00:00:00.000Z","title":"Serverless 动态博客开发趟「坑」记","description":"本文为 Serverless 社区成员撰稿。作者云洋，从事信息管理工作，多年电子政务信息系统建设管理经验，对 Serverless 技术和架构有浓厚兴趣。","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["Serverless","动态博客"],"keywords":"Serverless 动态博客开发,Serverless 动态博客,Serverless 开发","outdated":true},"wordCount":{"words":391,"sentences":74,"paragraphs":74},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-03-12-blog-issues.md","fields":{"slug":"/blog/2020-03-12-blog-issues/","keywords":["serverless","website","部署","serverlesscloud","报错"]},"html":"<p>这个假期挺长的，不过有幸在腾讯云 Serverless 在线直播里看到了 Serverless 的相关课程，从第一期学完，还是凭添了很多学习乐趣。</p>\n<p>前面三节课学了一些 Serverless 的基本知识和架构特点，也跟着开发部署，其实都蛮有趣的，唯一就是都没有管理后台。第四期课程很好的弥补了这一不足。刘宇老师给大家带来的项目 Python+HTML 的动态博客，后台是基于 Flask 的，虽然我不太熟悉这个框架，但是老师给提供了课程的源码，所以可以先用后学。</p>\n<ul>\n<li>\n<p>这节动态博客的直播回放地址是：</p>\n<p><a href=\"https://cloud.tencent.com/edu/learning/live-1926\">https://cloud.tencent.com/edu/learning/live-1926</a></p>\n</li>\n<li>\n<p>刘宇老师的项目的 Github 地址是：</p>\n<p><a href=\"https://github.com/anycodes/ServerlessBlog\">https://github.com/anycodes/ServerlessBlog</a></p>\n</li>\n</ul>\n<p>直播那天我提前准备好手机和电脑，就进教室了，不过当天课程收到网络的干扰很大，一直很卡，后来刘老师重新录制了课程，据说录到凌晨两点，这一点必须点赞，敬业精神太感人啦。在老师的热情带领下，我们的学习劲头也是十足的啊。</p>\n<p>我的学习路径可谓十分曲折，整整折腾了三天，不过最后终于实现了项目的成功部署，很开心！</p>\n<p>整体来说，其实项目部署就是四个步骤：</p>\n<ol>\n<li>下载源文件</li>\n<li>执行init.py</li>\n<li>修改 serverless.yaml 文件</li>\n<li>sls --debug 部署到云端。</li>\n</ol>\n<p>我在每一个步骤都踩过坑，我基本上按照顺序把坑和解决方案列出来，感兴趣的同学可以基于上面的链接尝试开发部署，如果遇到相关的坑，可以对照参考。</p>\n<h2 id=\"坑一：git-下载报错\"><a href=\"#%E5%9D%91%E4%B8%80%EF%BC%9Agit-%E4%B8%8B%E8%BD%BD%E6%8A%A5%E9%94%99\" aria-label=\"坑一：git 下载报错 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>坑一：Git 下载报错</h2>\n<p>Git下载报错，错误信息是这样如下：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">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</code></pre></div>\n<p>百度之后，发现针对RPC错误需要修改Git的buffer，调到700M后依然报了上面的fatal错误，和网络有关，最后放弃用git，选择老师发在文档里的压缩包，地址上面列出来了，大家可以去自行取用。</p>\n<h2 id=\"坑二：pip-的源设置和-pymysql\"><a href=\"#%E5%9D%91%E4%BA%8C%EF%BC%9Apip-%E7%9A%84%E6%BA%90%E8%AE%BE%E7%BD%AE%E5%92%8C-pymysql\" aria-label=\"坑二：pip 的源设置和 pymysql permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>坑二：pip 的源设置和 pymysql</h2>\n<p>部署过程中因为 init.py 里面用到了 pymysql，可是我没有安装，于是打开Anaconda Prompt 开始用 pip 安装，然而 pip 好像死了一样，完全没有反应，最后报错说找不到包。后来经同学和老师提醒，修改 pip 的源到国内，我用了清华的源，速度一下很快啊，安装成功。修改源的代码是：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple</code></pre></div>\n<p>如果大家需要安装其他包，就把 pymysql 换成要安装的包。</p>\n<p>但是 init.py 依然报错，于是就吧 pymysql 的包放在项目目录中，解决了问题。</p>\n<h2 id=\"坑三：yaml-没有-fullloader-属性\"><a href=\"#%E5%9D%91%E4%B8%89%EF%BC%9Ayaml-%E6%B2%A1%E6%9C%89-fullloader-%E5%B1%9E%E6%80%A7\" aria-label=\"坑三：yaml 没有 fullloader 属性 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>坑三：yaml 没有 FullLoader 属性</h2>\n<p>init.py 的执行一致不顺利，pymysql 的坑填完后继续报错。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511211265-IMG_0189.PNG\" alt=\"img\"></p>\n<p>于是以为自己没有安装对 yaml，后来老师建议删掉该语句，大家要注意，这个语句里 Fullloader 出现在一个逗号后面，所以我们只删掉逗号后面的 loader=yaml.FullLoader 就好了。</p>\n<h2 id=\"坑四：数据库连接\"><a href=\"#%E5%9D%91%E5%9B%9B%EF%BC%9A%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5\" aria-label=\"坑四：数据库连接 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>坑四：数据库连接</h2>\n<p>其实如果用老师提供的测试库的话，这个坑就不是问题，但是我觉得那么多同学做作业，老师的库压力会很大，正好我自己买了一个腾讯的云数据库是 MySql的，可以直接拿来用。</p>\n<p>于是我就天真的把数据库地址改成了自己的，以为它可以连上，但是连接超时，于是我有把用户和密码改成自己的，结果还是拒绝访问，一直到我去云数据库控制台去测试连接，才发现原来我的数据库端口没有写对。</p>\n<p>云数据库的外网链接设置还是很方便的，这次作业让我还进入了 PMA，进行了在线数据库操作，挺好用的。到这里，init.py 的坑就填平了，我看到新建数据库的成功。</p>\n<h2 id=\"坑五：网络问题\"><a href=\"#%E5%9D%91%E4%BA%94%EF%BC%9A%E7%BD%91%E7%BB%9C%E9%97%AE%E9%A2%98\" aria-label=\"坑五：网络问题 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>坑五：网络问题</h2>\n<p>这个坑有点深，我在里面爬了两天才爬出来，而且之所以爬出来，完全是因为换了网络哦。</p>\n<p>不得不说移动的家庭宽带真的不给力啊，Git 连不上，部署函数总是断线。我之所以在这个坑里没有很快出来，还有一个原因，就是每次的报错信息不一样，这深深的吸引了我。</p>\n<p>我的报错信息五花八门，给大家分享一下：</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511211267-IMG_0189.PNG\" alt=\"img\"></p>\n<p>这个错误出现的原因其实也很难想通，因为给的信息太少，并不知道到底是哪里有问题。后来还报过一个类似的错误，印象里是说读不到 'admin<em>add</em>article'，我后来发现 git 上面又更新了一个文件夹 picture，里面有这个名字对应的图片，所以我就重新 git clone 了项目文件，把picture文件夹拷贝了过来。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511211810-IMG_0189.PNG\" alt=\"img\"></p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511211686-IMG_0189.PNG\" alt=\"img\"></p>\n<p>这类 443 的错误，我是一直没有解决啦，直到我更换了网络。不过大家可以看到上面有一个存储桶的部署信息，那个桶不是我的。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511211634-IMG_0189.PNG\" alt=\"img\"></p>\n<p>关于 InvalidParameterValue 不太理解，什么样的 ID 是合法的呢？我考虑应该是网络中断丢失了数据，导致有些字符没了。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511212075-IMG_0189.PNG\" alt=\"img\"></p>\n<p>ECONNRESET 这个错误报了很多次，具体是什么意思不太明白，socket hang up应该还是网络不通畅吧。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511212164-IMG_0189.PNG\" alt=\"img\"></p>\n<p>还有一个是超时了，估计是网络情况不好。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511211785-IMG_0189.PNG\" alt=\"img\"></p>\n<p>这个 undefined RequestId 也是出现了多次的错误，很奇特。估计是网络数据丢包造成的吧。</p>\n<p>以上所有的问题都是网络问题，解决方法：同学们提醒我不要部署到 hongkong 区域，可能海外服务器会有网络不稳定的情况，于是我换到了beijing，依然不行，我还换到多 guangdong，网络错误依然不断。</p>\n<p>这个网络问题引发了我的不少猜疑啊：比如，我是不是频繁部署系统被封IP了？是不是防止勒索病毒，443端口封闭啦？我家的宽带是不是该换运营商了？</p>\n<p>显然最后一个猜疑是并确认了的。我利用手机数据流量包部署系统就很快，240s 左右解决问题。</p>\n<p>这里面其实报错信息不是很友好，首先，我不知道具体到哪一个文件的时候网络断开的，所以我不能肯定是不是某一个文件有问题，如果这时候能够定位一个断开的时候处理在哪一个文件，会对用户更有帮助。</p>\n<p>而关于那个存储桶，应该是老师的，因为后来在部署成功的一次我在信息里看到了从老师的存储桶里上传了代码到一个存储桶里，而我在自己的存储桶列表里看到了那几个桶。</p>\n<p>之所以有几个，是因为我换过几个区来部署。有一些程序老师可能部署在他的桶里，这样是不是省我们的流量呢？也可能是为了部署 Flask Admin 的过程更加平顺，老师把一些依赖部署到了线上的桶里。</p>\n<p>记得上节课的老师也用了 Flask，他说 Flask 需要对应 Python 的精确版本，我们每个人的版本可能都会有些细小差别，造成部署过程的颠簸，老师为了避免这种状况，就额外处理了。老师，您用心啦！</p>\n<h2 id=\"坑六：uploadpicture\"><a href=\"#%E5%9D%91%E5%85%AD%EF%BC%9Auploadpicture\" aria-label=\"坑六：uploadpicture permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>坑六：UploadPicture</h2>\n<p>因为每次网络问题都发生在部署uploadPicture这个部分，时间很长，所以我都会忍不住cancel重来。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511212108-IMG_0189.PNG\" alt=\"img\"></p>\n<p>于是这个部分后来被我注释掉了。注释之后，部署很顺利，因为换用了手机的网络。这突如其来的顺利让我觉得 uploadPicture 可能是无罪的，我应该把它放回来。于是我就取消了注释，这时候灾难发生了，10000s 之后它还在部署。</p>\n<p>我很好奇，为什么这个部分这么特殊，于是我打开一些 uploadPicture 的源文件来看，发现在 demo.py 里面有很多设置和我们的 global 设置不一样，于是我开始七七八八的修改起来，然而，老师说那个文件不在全局发挥最用，只是qqcloud_cos 这个依赖的一个 demo，于是我又改了回去。</p>\n<p>后来，有同学说清空存储桶可以解决这种超长时间部署的问题，于是我试了一下。恩，真的管用哦！感谢同学的提醒。</p>\n<blockquote>\n<p>PS：我后来回想很可能就是缺少 picture 那个文件夹吧，我猜测部署的过程可能会跑有些 test 程序，文件的代码会被执行，而如果里面的参数读取不到就会一直停在那里。</p>\n</blockquote>\n<h2 id=\"坑七：后台无法使用\"><a href=\"#%E5%9D%91%E4%B8%83%EF%BC%9A%E5%90%8E%E5%8F%B0%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8\" aria-label=\"坑七：后台无法使用 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>坑七：后台无法使用</h2>\n<p>部署成功之后，我访问后台，发现只有登陆页可用，其他页面基本上一点就报错，Internal error。在老师的提示下，我到了函数的控制台，查看了Blog_Admin的报错信息，发现是数据库连接不到。</p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511212052-IMG_0189.PNG\" alt=\"img\"></p>\n<p><img src=\"https://img.serverlesscloud.cn/2020318/1584511212266-IMG_0189.PNG\" alt=\"img\"></p>\n<p>可是我之前明明在数据库里新增数据的，于是我打开了 serverless.yml 文件和数据库里的库名称对照, 发现数据库的名称多了一个字母 l，哎，粗心啊粗心。修改了 yaml 文件后再次部署，成功了！</p>\n<p>应该说控制台的日志挺详细的，我觉得如果能把成功信息和报错信息在颜色上区分一下就更好啦，目前看来是用时间戳来区分的，不过有时候请求多起来，很多正确和报错信息在一起，找起来很麻烦啊。要是有丰富一些的查询选项也许更好用。</p>\n<p>最后，我终于跳过了这些坑，上了岸！</p>\n<p>部署成功后的页面如下：<a href=\"http://blogdemo-1253166145.cos-website.ap-beijing.myqcloud.com/\">http://blogdemo-1253166145.cos-website.ap-beijing.myqcloud.com/</a></p>\n<p>于是，我带着刘宇老师布置的作业来投稿，信息化资产复用最大化，感觉是一次非常开心的学习体验！</p>\n<hr>\n<div id='scf-deploy-iframe-or-md'></div>\n<hr>\n<blockquote>\n<p><strong>传送门：</strong></p>\n<ul>\n<li>GitHub: <a href=\"https://github.com/serverless/serverless/blob/master/README_CN.md\">github.com/serverless</a></li>\n<li>官网：<a href=\"https://serverless.com/\">serverless.com</a></li>\n</ul>\n</blockquote>\n<p>欢迎访问：<a href=\"https://serverlesscloud.cn/\">Serverless 中文网</a>，您可以在 <a href=\"https://serverlesscloud.cn/best-practice\">最佳实践</a> 里体验更多关于 Serverless 应用的开发！</p>","tableOfContents":"<ul>\n<li><a href=\"/blog/2020-03-12-blog-issues/#%E5%9D%91%E4%B8%80%EF%BC%9Agit-%E4%B8%8B%E8%BD%BD%E6%8A%A5%E9%94%99\">坑一：Git 下载报错</a></li>\n<li><a href=\"/blog/2020-03-12-blog-issues/#%E5%9D%91%E4%BA%8C%EF%BC%9Apip-%E7%9A%84%E6%BA%90%E8%AE%BE%E7%BD%AE%E5%92%8C-pymysql\">坑二：pip 的源设置和 pymysql</a></li>\n<li><a href=\"/blog/2020-03-12-blog-issues/#%E5%9D%91%E4%B8%89%EF%BC%9Ayaml-%E6%B2%A1%E6%9C%89-fullloader-%E5%B1%9E%E6%80%A7\">坑三：yaml 没有 FullLoader 属性</a></li>\n<li><a href=\"/blog/2020-03-12-blog-issues/#%E5%9D%91%E5%9B%9B%EF%BC%9A%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5\">坑四：数据库连接</a></li>\n<li><a href=\"/blog/2020-03-12-blog-issues/#%E5%9D%91%E4%BA%94%EF%BC%9A%E7%BD%91%E7%BB%9C%E9%97%AE%E9%A2%98\">坑五：网络问题</a></li>\n<li><a href=\"/blog/2020-03-12-blog-issues/#%E5%9D%91%E5%85%AD%EF%BC%9Auploadpicture\">坑六：UploadPicture</a></li>\n<li><a href=\"/blog/2020-03-12-blog-issues/#%E5%9D%91%E4%B8%83%EF%BC%9A%E5%90%8E%E5%8F%B0%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8\">坑七：后台无法使用</a></li>\n</ul>"},"previousBlog":{"id":"c18924ec-cade-5f2f-91ca-e1717924521b","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020115/1579078112543-1577769064015-joshua-aragon-FGXqbqbGt5o-unsplash.jpg","authors":["Aceyclee"],"categories":["engineering-culture","user-stories"],"date":"2020-03-14T00:00:00.000Z","title":"前端为什么要关注 Serverless?","description":"前端为什么要接 serverless? 交给后端不行吗?","authorslink":["https://www.zhihu.com/people/Aceyclee"],"translators":null,"translatorslink":null,"tags":["Serverless","全栈应用"],"keywords":"serverless发展,Serverless 基本概念,Serverless生产力","outdated":null},"wordCount":{"words":233,"sentences":51,"paragraphs":51},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-03-14-why-fe-learn-sls.md","fields":{"slug":"/blog/2020-03-14-why-fe-learn-sls/","keywords":["serverless","vue","vuejs","website","website 组件","serverless","Serverless","tencent","express","serverlesscloud","github"]}},"nextBlog":{"id":"a6f28826-bc2f-552b-80ef-d961efacd2b0","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020318/1584508672111-Blazor.jpg","authors":["Elder James"],"categories":["user-stories"],"date":"2020-03-11T00:00:00.000Z","title":"通过 Serverless 加速 Blazor WebAssembly","description":"本文为 Serverless 社区成员撰稿。作者杨舜杰，系统架构研发工程师，开源爱好者，.NET开源项目 shriek-fx 作者","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["Serverless","Blazor"],"keywords":"Serverless Blazor,Blazor WebAssembly,Serverless加速","outdated":true},"wordCount":{"words":215,"sentences":50,"paragraphs":49},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-03-11-blazor-webAssembly.md","fields":{"slug":"/blog/2020-03-11-blazor-webAssembly/","keywords":["nodejs","serverless","website","blazor","bucket","serverless","BlazorServerless","Serverless","Blazor"]}},"recommendBlogs":{"edges":[{"node":{"id":"4300b21c-7209-5256-86ff-0d38e3daec9b","frontmatter":{"thumbnail":"https://main.qcloudimg.com/raw/14f1c8eed372e76c1b139703b2f6d0fa.jpg","authors":["KieranMcCarthy"],"categories":["user-stories","engineering-culture"],"date":"2018-01-09T00:00:00.000Z","title":"我是如何在四年时间里，从厨师转行为 Serverless 应用开发者","description":"我是厨师出身，现在成为了一名 Serverless 应用开发者。","authorslink":["https://serverless.com/author/kieranmccarthy/"],"translators":["Aceyclee"],"translatorslink":["https://www.zhihu.com/people/Aceyclee"],"tags":["应用开发","Serverless"],"keywords":"Serverless 应用开发,Serverless 管理,厨师转行为 Serverless 应用开发者","outdated":null},"wordCount":{"words":285,"sentences":38,"paragraphs":36},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-01-09-from-chef-to-serverless-developer-in-4-years.md","fields":{"slug":"/blog/2018-01-09-from-chef-to-serverless-developer-in-4-years/","keywords":["无服务器","无服务器开发","云函数","学习","Serverless","构建","Framework","开发者","服务器","应用","学位","简历"]}}},{"node":{"id":"713a0563-4bf9-5721-bacb-3b4ef609fe4a","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/camp-fire/camp-fire-housing-thumb.jpg","authors":["EricWyne"],"categories":["guides-and-tutorials","user-stories"],"date":"2018-12-05T00:00:00.000Z","title":"Serverless Twitter 机器人帮助为坎普山火受灾者安置住房","description":"加利福尼亚州的坎普山火致使数千人流离失所，为此，我构建了一个简单的 Serverless Twitter 机器人来帮助将受灾者安置在临时住房！","authorslink":["https://serverless.com/author/ericwyne/"],"translators":["Aceyclee"],"translatorslink":["zhihu.com/people/Aceyclee"],"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":157,"sentences":26,"paragraphs":26},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-12-05-serverless-twitter-camp-fire.md","fields":{"slug":"/blog/2018-12-05-serverless-twitter-camp-fire/","keywords":["serverless","无服务器","云函数","Serverless","org","住房","Twitter","函数","受灾","机器人","山火"]}}},{"node":{"id":"98602143-b837-5f50-a24f-3b1ec76044d7","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/sqquid/sqquid-serverless-thumb.jpg","authors":["RonPeled"],"categories":["user-stories"],"date":"2018-12-17T00:00:00.000Z","title":"SQQUID：100% 无服务器初创公司","description":"SQQUID 将 AWS Lambda 和无服务器框架用于其核心产品和营销网站。我们来看看一个完全无服务器的初创公司是怎样的。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":266,"sentences":42,"paragraphs":42},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-12-17-sqquid-one-hundred-percent-serverless.md","fields":{"slug":"/blog/2018-12-17-sqquid-one-hundred-percent-serverless/","keywords":["go","serverless","无服务器","无服务器架构","服务器","架构","Lambda","集成","FaaS","串行","系统"]}}},{"node":{"id":"29dc2e58-d2ba-56f9-aee1-d21b0bc62e0e","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/ao-com-story/ao-serverless-thumbnail.png","authors":["NickGottlieb"],"categories":["user-stories"],"date":"2019-04-24T00:00:00.000Z","title":"AO.com：逐渐转向无服务器优先","description":"AO.com 的 SCV 团队率先尝试无服务器服务。折服于无服务器框架的快速周转时间和低维护成本，整个团队逐渐转向无服务器优先。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":236,"sentences":42,"paragraphs":35},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-04-24-ao-serverless-first.md","fields":{"slug":"/blog/2019-04-24-ao-serverless-first/","keywords":["serverless","无服务器","服务器","团队","Lambda","功能","构建"]}}},{"node":{"id":"752d08d1-387a-5bde-acf3-98141baab294","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020414/1586871710979-%E5%85%AC%E5%85%B1%E7%94%A8.png","authors":["Anycodes"],"categories":["user-stories"],"date":"2019-06-20T00:00:00.000Z","title":"如何用 Serverless 为 Python 云函数打包依赖","description":"在使用无服务器云函数SCF时通常会遇到导入第三方库的问题，很多小伙伴比较头疼是：应该如何打包进去？这里，推荐几个不错的方法。","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["云函数","Serverless"],"keywords":"Serverless,Serverless应用,无服务器云函数","outdated":null},"wordCount":{"words":81,"sentences":43,"paragraphs":43},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-06-20-for-python-cloud-functions.md","fields":{"slug":"/blog/2019-06-20-for-python-cloud-functions/","keywords":["java","serverless","无服务器","无服务器云函数","云函数","serverlesscloud","安装","serverless","pillowtest"]}}},{"node":{"id":"2dc78814-9d77-555b-a1bb-ad202c8ec2d1","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/cloudforecast/thumbnail.png","authors":["FrancoisLagier"],"categories":["user-stories"],"date":"2019-08-07T00:00:00.000Z","title":"Serverless：初创企业的理想选择？（CloudForecast 案例分析）","description":"CloudForecast 是 2018 年成立的一家独立初创企业，本文将介绍他们决定选择 Serverless 的原因。","authorslink":["https://serverless.com/author/francoislagier/"],"translators":["Aceyclee"],"translatorslink":["zhihu.com/people/Aceyclee"],"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":211,"sentences":29,"paragraphs":29},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-08-07-serverless-for-startups.md","fields":{"slug":"/blog/2019-08-07-serverless-for-startups/","keywords":["serverless","云函数","serverless","函数","Serverless","utm","Framework","blog","CloudForecast","cloudforecast"]}}},{"node":{"id":"97450b07-658b-5207-8216-1c7b9b51b115","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020114/1578988490344-v2-8b2cd2c5275aa2c5a3c5083a148a7a9f_1200x500.jpg","authors":["Anycodes"],"categories":["user-stories"],"date":"2019-09-01T00:00:00.000Z","title":"如何通过 Serverless 与自然语言处理，让搜索引擎「看」到你的博客","description":"Serverless 与自然语言处理结合的一个小应用","authorslink":["https://www.zhihu.com/people/liuyu-43-97"],"translators":null,"translatorslink":null,"tags":["个人博客","serverless"],"keywords":"Serverless 自然语言处理","outdated":null},"wordCount":{"words":106,"sentences":34,"paragraphs":34},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-09-01-search-engine-blog.md","fields":{"slug":"/blog/2019-09-01-search-engine-blog/","keywords":["serverless","云函数","keywords","serverlesscloud","summary"]}}},{"node":{"id":"ae4fd2f8-515c-5aec-b584-38427ef33f7e","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020114/1578989800047-part-00492-780.jpg","authors":["Anycodes"],"categories":["guides-and-tutorials","user-stories"],"date":"2019-09-16T00:00:00.000Z","title":"突破传统 OJ 瓶颈，「判题姬」接入云函数","description":"通过 Serverless 实现在线编程","authorslink":["https://www.zhihu.com/people/liuyu-43-97"],"translators":null,"translatorslink":null,"tags":["在线编程","云函数"],"keywords":"Serverless 在线编程,Serverless OJ","outdated":null},"wordCount":{"words":169,"sentences":30,"paragraphs":30},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-09-16-online-Judge.md","fields":{"slug":"/blog/2019-09-16-online-Judge/","keywords":["python","serverless","云函数","代码","函数","serverless"]}}}],"totalCount":64}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"55953085-8519-57ce-bf38-6f3a36d113c3","previousBlogId":"c18924ec-cade-5f2f-91ca-e1717924521b","nextBlogId":"a6f28826-bc2f-552b-80ef-d961efacd2b0","categories":["user-stories"]}}}