Ruby应用部署AWS Lambda时部分Gems依赖未正确安装求助
解决Ruby部署AWS Lambda时Gems扩展未构建的问题
出现这类错误的核心原因是你在本地系统(比如Mac/Windows)编译的Gems扩展与Lambda的Amazon Linux 2运行时不兼容,Lambda无法识别非目标平台的编译产物,所以会忽略这些Gems。以下是针对性的解决步骤:
1. 使用Lambda兼容环境构建Gems
Lambda的Ruby 3.2运行时基于Amazon Linux 2,必须在相同环境下编译带有原生扩展的Gems。推荐用AWS提供的SAM构建镜像来完成:
# 先删除旧的vendor目录,避免残留本地编译文件 rm -rf vendor/bundle # 运行Docker容器,挂载当前项目目录,在容器内执行bundle install docker run -v "$PWD":/var/task public.ecr.aws/sam/build-ruby3.2:latest bundle install --deployment
这个镜像完全匹配Lambda的运行环境,编译出的扩展能直接在Lambda上运行。
2. 检查Bundle配置
确保你的bundle config没有强制使用纯Ruby平台,避免覆盖平台编译设置:
# 查看当前配置,确认没有force_ruby_platform=true的设置 bundle config list # 如果有,执行以下命令移除 bundle config unset force_ruby_platform
3. 验证编译产物
构建完成后,检查vendor/bundle/ruby/3.2.0/gems中对应Gems的目录:
- 比如
pg-1.5.4目录下应该存在lib/pg_ext.so(Linux平台的编译产物) - 如果只有纯Ruby文件,说明编译未完成,需要重新执行步骤1
4. 重新部署Lambda
将更新后的vendor目录一起打包部署到Lambda,再次测试即可解决扩展未构建的问题。
内容的提问来源于stack exchange,提问作者Alvaro
相关产品推荐
相关产品推荐

