首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >posix_fallocate()失败:打开.realm文件时不允许执行操作

posix_fallocate()失败:打开.realm文件时不允许执行操作
EN

Stack Overflow用户
提问于 2019-09-06 23:44:20
回答 1查看 86关注 0票数 1

当我尝试在无服务器框架的/tmp目录中打开和下载.realm文件时,我得到以下错误。{"errorType":"Runtime.UnhandledPromiseRejection",“errorMessage”:“错误: posix_fallocate()失败:不允许操作”}

代码语言:javascript
复制
Below is the code:

let realm = new Realm({path: '/tmp/custom.realm', schema: [schema1, schema2]});
realm.write(() => {
                console.log('completed==');
            });
EN

回答 1

Stack Overflow用户

发布于 2021-10-14 13:22:17

编辑:这可能很快就会在Realm-Core:see issue 4957中得到修复。

如果你在其他地方遇到这个问题,这里有一个解决方法。

这是由于AWS Lambda不支持fallocatefallocate64系统调用造成的。亚马逊没有在这种情况下返回正确的错误代码,而是阻止了系统调用,以便返回EPERM

解决方案是将一个小型共享库作为层添加到lambda中:在Linux机器上或在lambda-ci Docker镜像中编译以下C文件:

代码语言:javascript
复制
#include <errno.h>
#include <fcntl.h>

int posix_fallocate(int __fd, off_t __offset, off_t __len) {
    return EINVAL;
}

int posix_fallocate64(int __fd, off_t __offset, off_t __len) {
    return EINVAL;
}

  1. 现在,将它编译成一个共享对象,如下所示

gcc -shared fix.c -o fix.so

然后,

  1. 将其添加到ZIP文件的根目录中:

zip layer.zip fix.so

  1. 从这个压缩

创建一个新的lambda层

  1. 将lambda层添加到lambda函数

  1. 最后通过将环境值LD_PRELOAD的值/opt/fix.so配置到Lambda来加载共享对象。

  1. Enjoy.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57825072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档