小程序云开发实战系列01--云环境设置

BondXu 2019-06-30

因为工作原因,使用过亚马逊AWS的serverless构架,当时就觉得这是一个非常适合小程序的基础设施。今年开始自己的微信小程序开发,决定用serverless架构,于是便使用了腾讯云做为小程序的后端,总结下来有以下几个痛点:

当暴露API给小程序时,需要使用已备案的域名。而在腾讯云里备案域名需要租用至少三个月的云服务器(无聊的套路)。但是我只用云函数,不需要云服务器。于是我花了一百多元租了个最低配云服务器只为了域名备案。

云函数的冷启动耗时不是特别理想,我需要使用一个定时器每隔30秒触发一次我比较常用的几个云函数,确保它们总是处于热启动的状态。

花了大量时间来配置云函数,对象储存,云数据库(用的是MySQL),CDN静态加速,使它们之间能顺畅的协同工作。令我意外的是腾讯云的人工客服系统。在配置系统时我经常会提交工单问一些自己难以解决的问题,有时是在凌晨两点。而他们的客服和工程师有时会在一小时内回答我的问题!

这个月当我开始新的小程序项目(私货夹带:《Meetup丨活动报名组局》)发现微信开发者工具整合进了云开发。于是便有了这个云开发实战系列。微信送了两个云环境,一个用于开发,一个用于发布。我命名一个为dev,一个为release。这一篇我想主要谈谈关于环境配置踩过的坑。

坑一:当完成开发准备发布时,我从dev环境转换到release环境。这个步骤并不是在云开发控制台上选择当前环境就能完成的,而需要在app.js里指定环境ID

App({
  onLaunch: function () {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        env: 'release-xxxx' // 你的环境ID
        traceUser: true,
      })
    }
  }
})

并在每一个云函数的cloud.init函数里指定环境ID

const cloud = require('wx-server-sdk')
cloud.init({
  env: 'release-xxxx' // 你的环境ID
})
const db = cloud.database()

坑二:从dev转到release时,千万不要忘记设置为release环境的数据库设置相应的权限,否则新环境会使用默认的仅创建者及管理员可读写,而我的小程序主页需要所有用户可读,仅创建者及管理员可写权限,这个问题很容易在开发阶段被忽视,因为开发测试时我一直是创建者身份。导致发布后朋友们纷纷告诉我打开后什么都没有显示:) 还好修改云开发不需要等待审核,第一时间纠正了错误。

坑三:使用定时触发器需要在云函数文档里添加一个config.json文件。但我花了一点时间才搞明白为什么触发器没有起作用。原来像往常一样点击“上传并部署”云函数并不会使触发器生效,而需要点击“上传触发器”。
小程序云开发实战系列01--云环境设置
也许你已经发现其实我自己的粗心大意对这些坑负有责任,一些问题在小程序开发文档里有提及,比如设置环境ID。我只想说这些是很容易被忽略,但后果严重的问题。希望通过我的分享能帮大家节省点时间。我基本上对小程序云开发持相当正面的评价。它解决了我在使用腾讯云时遇到的三个痛点:1. 不再需要域名备案(备案通常需要好几天的时间,而且过程繁琐,需要填很多表,拍幕布照片等)2. 云函数的冷启动时间有改善,貌似微信针对性地做了优化,我不再需要设置定时触发来保证它们总处于热启动状态。3. 省去了自己搭建云后台所需要的配置过程,实现了开箱即用。

但小程序的云开发也有一些局限性,我会在下一篇《小程序云开发实战系列02--NoSQL云数据库》里分享我使用云开发数据库的一些体会,敬请期待。

本系列第二章:小程序云开发实战系列02--云数据库

《Meetup丨活动报名组局》是我最近开发的一个活动报名预约工具小程序,这个系列文章主要来自我在开发这款小程序时的一些体会心得。感兴趣的小伙伴可以扫下面的二维码进入我的小程序。
小程序云开发实战系列01--云环境设置

相关推荐

戴翔的技术 / 0评论 2020-02-03