阿里云现在新增了小时级低消,大家的开销一下子涨了不少。今天就给大家讲讲,怎么从阿里云迁移到支付宝云。
就拿咱们之前做的商城项目来举例,迁移之前,大家一定要先检查好:项目能不能正常跑起来,还有所有数据是不是完整没问题。
整个迁移流程,总共 5 步就能搞定:
第1步:从web控制台生成初始化数据
在web控制台选择云数据库->生成初始化数据,选择所有的数据表,设为导出全部数据,右上角选择“生成包含ID”的所有数据,如果你的表比较多的话,他限制全部数据下载最大量是20条,你需要批量下载几次。
注意:
要生成包含ID的记录,因为有可能会存在多个表关联关系,如果你不带原有ID,导入到新的数据库中,就会出现无法关联的情况。
第2步通过AI编辑器清洗数据
将所有压缩包放置到同一个文件夹中,方便让AI帮忙清洗。
一个数据表通常会生成三个文件,后缀分布是:.schema.json(结构)、.init_data.json(数据记录)、.index.json(索引)。
你可以使用免费的AI编辑器,如:字节的Trae、腾讯的CodeBuddy,下面就分步骤说一下清洗的过程。
1.删除schema
schema.json本地已经有了,没必要处理,直接让AI给你删除就行了。
删除文件夹内所有后缀为.schema.json的文件
2.对导出记录的_id处理
如果导出数据的时候,设置的是导出全部记录,导出的_id会放置到一个oid对象中,如下所示:
"_id":{"$oid":"692d5d50eef9cb15085972f3"}“_id”: { “$oid”: “692d5d50eef9cb15085972f3”} 找到文件夹内后缀名为.init_data.json的所有文件,将这种格式的去掉对象,只保留oid后面的值
3.压缩初始化库
找到文件夹内后缀名为.init_data.json的所有文件,检查json格式是否正确,压缩为紧凑格式
就是通过上面三个步骤,就可以将导出的数据进行清洗了,如果你的情况不一致,可以继续和AI进行交流修改。
完成之后将清洗好的文件夹内的所有数据,复制到项目的database中。
第3步创建新的支付宝服务空间
创建支付宝云的服务空间,建议选择按量计费方式,这种也不用担心包年包月忘记续费,服务空间被销毁的问题,而且按量计费也比较省钱。
第4步切换服务空间并初始化项目
选择好刚刚创建好的支付宝云服务空间,出现重名的公共模块或者函数,一律选择覆盖即可。
第5步:运行并处理兼容
以上工作做好之后,原来的项目运行在浏览器或者微信小程序,分别测试一下,是否和之前老服务空间看到的有没有差异,一般不会有什么差异。
主要要解决的兼容是云存储问题,因为我们搬家值搬迁了云函数和数据库,云存储历史内容比较少的话,可以通过web控制台或者数据库里有保留文件可以批量下载下来,但是内容多的话显然是下载不现实的,所以不建议迁移云存储,因为计费的上涨主要是云函数的低消造成的,和云存储没太大关系,你就将之前存储的内容放到老的阿里云服务空间就行了,只要保证新上传的图片,上传到新的阿里云服务空间就行了。
兼容处理
1.阿里云和支付宝云内置存储的差异
客户端使用uploadFile将本地上传云存储后,相应参数fileID是有差异的,阿里云返回的fileID是https://网址,是可以直接访问的,而支付宝云返回的fileID是cloud://是无法直接查看的,需要通过getTempFileURL获取到https地址。
因此如果迁移之后,对这一块没有做兼容处理,很容易导致存储进数据库的url地址,在原有的程序逻辑上无法直接使用,所以,我们需要调用uploadFile上传之后将获取的fileID处理一下,如果检测到时支付宝云,那就转成https之后在存入到数据库中。
//将支付宝云返回的cloud地址变成https地址exportconstcloudToHttps=(str)=>{returnstr.replace('cloud://','https://').replace(str.split('/')[2],str.split('/')[2]+'.normal.cloudstatic.cn');};//uploadFile上传单张图片并调用cloudToHttps方法将cloud地址变为https地址exportconstuploadFileItem=async(url,rootPath='public',index=0)=>{lettempurl=url;letuploadRes=awaituniCloud.uploadFile({filePath:tempurl,cloudPath:rootPath+'/'+dayjs().format('YYYYMMDD')+'/'+Date.now()+'_'+index+'.jpg',cloudPathAsRealPath:true});if(uniCloud.config.provider=='alipay'&&uploadRes?.fileID)uploadRes.fileID=cloudToHttps(uploadRes.fileID);returnuploadRes;};2.浏览器处理跨域
选择上传图片的时候,控制台可能会报“Access to XMLHttpRequest at 'https://u.object.cloudrun.cloudbaseapp.cn/miniapp-prod-env-00jy6aw7au2’from origin ‘http://localhost:5173’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.”,如下图所示:
这是因为浏览器要求同源出现了跨域问题,那就需要再web控制台跨域配置中,新增本地项目启动的地址localhost:5173和localhost:5174都加进去,再选择上传就不会出问题了。
3.微信小程序配置合法域名
在支付宝云服务空间的总览中,找到上传、下载、request域名,填入到微信小程序后台->开发管理->服务器域名对应的位置进行填入。
总结
以上就是讲阿里云服务空间迁移至支付宝云服务空间,如果在搬迁过程中遇到什么问题,或者有更好的办法,可以在评论区进行交流。