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

基于Ubuntu的Heroku 18镜像中带C扩展的Ruby Gems无法构建

嘿,我来帮你搞定这两个问题——先解决你关心的Cedar-14装新版Node的简便方法,再搞定heroku:18镜像下C扩展gem装不上的难题!

一、在Cedar-14镜像中安装新版Node.js的简便方案

如果不想升级基础镜像,用**nvm(Node Version Manager)**是最灵活省心的方式,既能快速安装符合Webpacker要求的Node版本,还能随时切换:
在你的Cedar-14 Dockerfile里加上这些步骤:

# 安装nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 加载nvm并安装Node 16.x(Webpacker兼容的稳定版本,选>=6.0.0的版本都可以)
RUN export NVM_DIR="$HOME/.nvm" && \
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
    nvm install 16.x && \
    nvm alias default 16.x
# 让Node和npm在全局环境生效
RUN echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc

这样就能在Cedar-14里用上符合要求的Node版本,不用折腾升级基础镜像。

二、解决heroku/heroku:18镜像下C扩展gem安装失败的问题

你碰到的错误核心是Ruby缺少编译C扩展所需的开发头文件,即使装了build-essential也没用,因为手动解压的Ruby包可能是runtime版本,不带开发组件。下面是两种解决方案:

方案1:改用heroku/heroku:18-build镜像 + 官方apt装Ruby(推荐)

heroku/heroku:18-build是专门的构建镜像,已经预装了所有编译工具(build-essential、libpq-dev这些),直接用apt装带开发头文件的Ruby,就能避免手动解压的坑:

FROM heroku/heroku:18-build

# 安装符合Webpacker要求的Node.js
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \
    apt-get install -y --no-recommends nodejs

# 安装Ruby 2.5.0和对应的开发包(自带编译C扩展需要的头文件)
RUN apt-get install -y --no-recommends ruby2.5 ruby2.5-dev

# 设置gem环境(如果需要自定义gem存储路径的话)
ENV GEM_HOME=/ruby/gems GEM_PATH=/ruby/gems
RUN gem install bundler:2.3.0 # 选和Ruby 2.5兼容的bundler版本

# 切换到项目目录,安装依赖
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install --without development test

方案2:修复手动安装Ruby的缺失问题

如果一定要手动下载Ruby tar包,得确保包带开发头文件,或者补充安装Ruby开发依赖:

FROM heroku/heroku:18-build

# 先装编译工具和Node.js
RUN apt-get update && \
    apt-get install -y --no-recommends build-essential libpq-dev nodejs

# 下载解压Ruby 2.5.0包(要确认tar包里有include/ruby-2.5.0目录,也就是开发头文件)
RUN mkdir -p /ruby && cd /ruby && \
    curl https://s3-external-1.amazonaws.com/heroku-buildpack-ruby/heroku-18/ruby-2.5.0.tgz -s -o - | tar xzf - --no-same-owner

# 如果手动解压的Ruby缺开发头文件,用apt补充
RUN apt-get install -y --no-recommends ruby2.5-dev

ENV GEM_HOME=/ruby/gems GEM_PATH=/ruby/gems
RUN gem install bundler
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install

关键提醒:

  • heroku/heroku:18是运行时镜像,只够跑程序,没有编译工具;而heroku/heroku:18-build是构建镜像,预装了所有编译依赖,构建阶段优先用它。
  • 你之前手动解压的Ruby tar包大概率是runtime版本,缺了ruby.h这类编译C扩展必须的头文件,这才是报错的根本原因,补充ruby-dev包或者换带dev的Ruby包就能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:24:23