Yapi 1.10.3迁移踩坑记
Posted iaiti
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yapi 1.10.3迁移踩坑记相关的知识,希望对你有一定的参考价值。
1.9.2有漏洞,mock会被入侵,而原本的集合测试中使用了assert断言。
网上所有的方案全是
在镜像中启动服务报错:Error: EROFS: read-only file system, mkdir '/sys/fs/cgroup/cpu/safeify'
这是safeify为了限定CPU资源使用,需要在此路径下写入文件,但是在镜像中此路径为只读路径,在 new Safeify对象时设置unrestricted: true,即可。
断言功能不可用,assert.equal is not a function
safeify对于执行脚本中库的引入方式与之前不同,需要通过unsafe来实现,具体可以看上面的sandbox.js的实现。
我用docker-compose的方式部署,看得是一头雾水
最后找到了文件所在位置
docker-compose exec yapi bash
进入 cd /home/vendors/server/utils
vim sandbox.js进行更改即可
镜像中没有yum没有vim,我们用apt安装
apt-get install vim,
出现Unable to locate package vim是apt过旧没有vim相关的包,进行包管理工具更新
apt-get update
重新输入
apt-get install vim 进行安装
const Safeify = require('safeify').default;
module.exports = async function sandboxFn(context, script)
// 创建 safeify 实例
const safeVm = new Safeify(
timeout: 3000,
asyncTimeout: 60000,
// cpuQuota: 0.5,
// true为不受CPU限制,解决safeify只读问题
unrestricted: true,
//引入assert,解决assert.equal not a function 问题
unsafe:
modules:
assert: 'assert'
);
safeVm.preset('const assert = require("assert");');
script += "; return this;";
const result = await safeVm.run(script, context);
safeVm.destroy();
return result
;
改完之后出现Request failed with status code 504
查看日志发现了另外的报错。对应的github issue 暂时还没解决
https://github.com/YMFE/yapi/issues/2543https://github.com/YMFE/yapi/issues/2543
UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
查看源码定位到应该是测试集合循环后的一个问题,前端同事看了源码之后,试着将sandbox.js 的return this移除后,该报错解决了。虽然这个报错解决了,但是还有另外的报错。
最后是回滚回原来的版本。做一些安全策略的限制。
以上是关于Yapi 1.10.3迁移踩坑记的主要内容,如果未能解决你的问题,请参考以下文章