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

Rails7+ESBuild+Sass容器启动失败:缺失依赖Gem求助

解决方案

一、修复Gem依赖缺失问题

  • 确保Dockerfile中执行了bundle install,且覆盖所有环境依赖的Gem(包括jsbundling-rails、cssbundling-rails这类开发组Gem)。如果Gemfile里这些Gem放在:development组,构建时要指定包含开发环境:
    # 安装除生产环境外的所有Gem
    RUN bundle install --without production
    # 若需要全环境Gem,直接用:
    # RUN bundle install
    
  • 检查docker-compose.yml是否挂载了本地vendor/bundle目录,若挂载可能导致容器bundle缓存与本地不一致,暂时注释该挂载后重新构建:
    # 注释此行,执行重新构建
    # - ./vendor/bundle:/usr/local/bundle
    
  • 构建镜像时禁用缓存,避免旧缓存导致Gem未安装:
    docker-compose build --no-cache web
    

二、解决yarn命令未找到问题

Rails7的jsbundling依赖yarn,需在Docker镜像中安装Node.js和yarn:

  • 在Dockerfile中添加安装步骤(以ruby:3.2-slim基础镜像为例):
    # 安装Node.js依赖
    RUN apt-get update && apt-get install -y curl gnupg
    RUN curl -sL https://deb.nodesource.com/setup_20.x | bash -
    RUN apt-get install -y nodejs
    # 全局安装yarn
    RUN npm install -g yarn
    

三、确保bin/dev脚本依赖正常

本地bin/dev通过foreman启动,容器内需确保foreman已安装:

  • 若Gemfile未包含foreman,添加gem 'foreman'后重新执行bundle install;也可直接在Dockerfile中安装:
    RUN gem install foreman
    

四、适配Rails7的完整Dockerfile示例

FROM ruby:3.2.2-slim

# 安装系统基础依赖
RUN apt-get update && apt-get install -y \
  build-essential \
  libpq-dev \
  curl \
  gnupg \
  nodejs \
  && rm -rf /var/lib/apt/lists/*

# 安装yarn
RUN curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor -o /usr/share/keyrings/yarnkey.gpg
RUN echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt-get install -y yarn

# 设置工作目录
WORKDIR /app

# 提前复制Gem文件,利用Docker缓存优化构建
COPY Gemfile Gemfile.lock ./
RUN bundle install --without production

# 复制项目文件
COPY . .

# 预安装前端依赖(开发环境可选,但bin/dev可能需要)
RUN yarn install

# 启动命令
CMD ["bin/dev"]

五、docker-compose.yml配置注意事项

version: '3.8'
services:
  web:
    build: .
    volumes:
      - .:/app
      # 若需要缓存bundle,需确保容器内目录权限正常,可先注释调试
      # - bundle:/usr/local/bundle
    ports:
      - "3000:3000"
    depends_on:
      - db
      - redis
    environment:
      - RAILS_ENV=development
      - DATABASE_URL=postgres://postgres:password@db:5432/your_app_development
      - REDIS_URL=redis://redis:6379/0

  db:
    image: postgres:15-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:
  # bundle:

六、验证步骤

  1. 清理旧容器与镜像:docker-compose down -v --rmi all
  2. 重新构建并启动:docker-compose up --build
  3. 查看容器日志,确认Gem安装完成、yarn命令可用、bin/dev正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:19:49