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

使用AWS CodePipeline部署Rails至Elastic Beanstalk时CodeBuild安装pg gem失败

解决AWS CodeBuild安装pg gem失败的问题

从你提供的错误日志里,核心问题很明确:CodeBuild环境中的PostgreSQL开发库(libpq)版本太低,pg 1.3.5要求至少PostgreSQL 9.3,但当前环境的版本不满足,导致native extension编译失败。本地环境没问题是因为你的本地PostgreSQL依赖版本达标了。

下面给你三个可行的解决方案,按实现复杂度从低到高排列:

方案一:降低pg gem版本适配现有环境

这是最简单的快速修复方式:

  • 打开项目的Gemfile,把pg的版本指定为兼容旧版PostgreSQL的分支,比如:
    gem 'pg', '~> 1.2.3'
    
    这个版本支持PostgreSQL 9.2及以上,能适配CodeBuild默认环境的依赖。
  • 本地执行bundle update pg,更新Gemfile.lock
  • 把修改后的Gemfile和Gemfile.lock提交到GitHub,重新触发CodePipeline即可。

方案二:在CodeBuild中安装高版本PostgreSQL依赖

如果你不想降低gem版本,可以在buildspec.yml里先升级PostgreSQL开发库,再执行bundle install。假设你的CodeBuild用的是默认的Amazon Linux 2镜像,修改后的buildspec.yml如下:

version: 0.2
phases:
  install:
    commands:
      # 启用PostgreSQL 12的yum源并安装开发库
      - sudo amazon-linux-extras install postgresql12 -y
      - sudo yum install postgresql12-devel -y
      # 让系统优先使用新安装的pg_config
      - export PATH=/usr/pgsql-12/bin:$PATH
      # 执行bundle install
      - bundle install
artifacts:
  files:
    - '**/*'

原理是先安装符合要求的PostgreSQL 12开发包,然后通过修改PATH让bundler找到新的pg_config,这样编译pg gem时就会用高版本的libpq了。

方案三:使用自定义CodeBuild镜像

如果你的项目长期需要这个环境,制作自定义镜像可以避免每次构建重复安装依赖,提升速度:

  1. 编写Dockerfile,基于Ruby 2.7.2的官方镜像,安装PostgreSQL 9.3+的开发库
  2. 构建镜像并上传到AWS ECR(弹性容器注册表)
  3. 修改CodeBuild项目的配置,选择使用这个自定义镜像

比如Dockerfile可以这样写:

FROM ruby:2.7.2
RUN apt-get update && apt-get install -y postgresql-client-13 libpq-dev

(如果用Debian/Ubuntu镜像的话,Amazon Linux的话调整为yum命令即可)

内容的提问来源于stack exchange,提问作者zcserei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:52:46