Mac下使用serverless-ruby-package部署Ruby应用崩溃如何解决?
问题排查解决步骤
- 根因定位:报错
TypeError: Cannot read property 'push' of undefined来源于serverless-ruby-package插件的逻辑缺陷,插件会默认往serverless.yml的package.include配置项追加路径,当你没有显式配置该字段时,变量为undefined,调用push方法就会触发该报错。
1. 补全serverless.yml的package配置
在你的serverless.yml中添加如下配置,至少显式声明include为空数组:
package: include: [] # 可根据业务需要补充需要打包的文件路径 exclude: - node_modules/** - .git/** - .DS_Store
修改完成后重新执行sls package或sls deploy即可解决该类型错误。
2. 解决原生gem跨架构编译问题(规避最初的curb加载报错)
你最开始遇到的cannot load such file -- curb报错是因为Mac本地编译的原生gem(尤其是curb这类依赖系统库的gem)和AWS Lambda的运行环境不兼容,可通过插件配置启用Docker编译解决:
custom: rubyPackage: useDocker: true # 替换为你实际使用的Ruby版本对应的Lambda构建镜像 dockerImage: lambci/lambda:build-ruby2.7
执行打包前确保本地Docker Desktop已启动,插件会自动在Docker容器中安装编译gems,保证和Lambda运行环境兼容。
3. 版本兼容性检查
serverless-ruby-package插件已停止维护多年,仅兼容Serverless v2及更早版本,如果你当前使用的是Serverless v3/v4版本,可降级Serverless版本解决兼容问题:
npm install -g serverless@2.72.3
4. 临时替代方案
如果插件仍然无法正常工作,可手动执行Docker命令完成gem安装后再部署:
# 替换为你实际使用的Ruby版本 docker run --rm -v "$PWD":/var/task lambci/lambda:build-ruby2.7 bundle install --deployment sls deploy
内容的提问来源于stack exchange,提问作者Qaiser Wali
相关产品推荐
相关产品推荐

