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

Fly部署失败:执行bundle exec rails assets:precompile报错求助

Rails 7 Docker构建assets预编译失败:yarn workspace lockfile问题

针对你遇到的本地预编译正常,但Docker部署Fly时bundle exec rails assets:precompile报错project@workspace:.: This package doesn't seem to be present in your lockfile的问题,可从以下几个方向排查解决:

  • Docker构建上下文缺失关键文件
    检查.dockerignore配置,是否误将yarn.lock、.yarnrc.yml、.yarn目录(Yarn 3+版本需保留)或workspace相关的package.json文件排除在外。Yarn 3的berry版本依赖这些文件解析workspace结构,缺失会导致容器内无法识别workspace包。
    解决:修改.dockerignore,确保上述文件/目录不在忽略列表;若为monorepo,需保证所有workspace子包的package.json都在Docker构建上下文范围内。

  • 容器与本地Yarn版本不匹配
    报错显示容器内使用Yarn 3.3.0,若本地Yarn版本不同,生成的yarn.lock格式可能存在差异,导致容器内Yarn无法正确解析workspace依赖。
    解决:在Dockerfile中指定与本地一致的Yarn版本,比如通过Volta安装:

    RUN volta install yarn@<你的本地Yarn版本号>
    

    或直接使用对应版本的Node镜像(如node:18-yarn-3.3)。

  • 构建阶段未正确执行Yarn安装
    若Dockerfile中在预编译assets前未执行yarn install,或安装步骤参数错误,会导致容器内依赖未正确安装,lockfile不匹配。Yarn 3默认启用--immutable模式,lockfile与package.json不一致会直接报错。
    解决:在预编译步骤前添加正确的依赖安装逻辑,确保复制完整的依赖配置文件:

    COPY package.json yarn.lock .yarnrc.yml ./
    COPY .yarn ./.yarn
    RUN yarn install --immutable --immutable-cache
    

    同时确保本地重新生成的yarn.lock已提交到代码仓库,保证Docker构建时能获取到最新的lockfile。

  • 预编译环境变量配置问题
    Rails预编译时的环境变量(如RAILS_ENV、NODE_ENV)会影响Yarn的依赖安装行为。若容器内设置为production环境,Yarn会默认忽略devDependencies,如果workspace包依赖dev依赖,可能导致解析失败。
    解决:在Dockerfile中明确设置预编译环境变量,若确实需要dev依赖(不建议生产环境使用),可调整Yarn安装参数:

    ENV RAILS_ENV=production
    ENV NODE_ENV=production
    # 若需保留dev依赖,添加以下参数
    # RUN yarn install --immutable --immutable-cache --production=false
    
  • Yarn workspace路径与容器工作目录不匹配
    检查package.json中的workspaces配置是否为相对路径,同时确认Dockerfile的WORKDIR设置是否与本地项目结构一致。若容器内工作目录与本地不同,workspace的相对路径会失效,导致Yarn无法找到对应包。
    解决:设置Dockerfile的WORKDIR为项目根目录(如WORKDIR /app),并将所有项目文件复制到该目录下,保证workspace路径在容器内有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:55:25