You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:42:27