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迁移踩坑记的主要内容,如果未能解决你的问题,请参考以下文章

Yapi 1.10.3迁移踩坑记

Yapi 1.10.3迁移踩坑记

Sqlserver数据迁移踩坑记

MacOS下SVN迁移Git踩坑记

Azure 跨订阅迁移资源踩坑记

RecyclerView 刷新踩坑记