我在运行lambda(运行时:Ruby 3.2)使用自定义层(pg gem)。
我按照本文档的Ruby文件结构创建了自定义层(.zip):
pg.zip
└ ruby/gems/3.2.0/
| build_info
| cache
| doc
| extensions
| gems
| └ pg-1.5.3
└ specifications
└ pg-1.5.3.gemspec
这个自定义层已经添加到lambda中。
我测试了一下,发现了一个错误:
{
"errorMessage": "cannot load such file -- pg",
"errorType": "Init<LoadError>",
"stackTrace": [
"/var/lang/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/task/lambda_function.rb:2:in `<top (required)>'",
"/var/lang/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb:59:in `require'"
]
}
我在安装了[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)
的Mac(x86_64)中构建了这个包。
Ruby脚本在本地运行时运行良好。
问题:
1.我的pg.zip(自定义图层)的文件结构是否正确?
1.或者,在我当前的环境中捆绑它时,这可能是不匹配的?
1条答案
按热度按时间vptzau2j1#
我在ruby 3.2运行时使用lambda层时也遇到了类似的错误!
致您的qns:
1.通常是正确的!在我们的例子中,我们将有一个额外的
lib
文件夹来存储本地扩展。1.是的,因为
pg
依赖于原生扩展,所以你必须在与运行时环境相同的环境中构建gem。以下是我解决它的步骤:
1.使用lambda ruby 3.2原生扩展构建gem
pg
。1.然后构建Dockerfile并将必要的扩展复制到层文件夹(即
$DIST_DIR
文件夹)。示例脚本:docker cp
命令用于在Amazon Linux 2上运行的lambda环境中运行时复制missing native extension files needed bypg
gem。生成的图层内容应如下所示:
1..zip
$DIST_DIR
使用您拥有的相同文档创建ruby3.2
lambda层:https://docs.aws.amazon.com/lambda/latest/dg/creating-deleting-layers.html