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

Ruby版本升级遭遇Asset Pipeline配置错误求助

问题背景与报错信息

正在将Ruby版本从2.7.6升级至3.2.2,应用基于Rails 6.1.3 + Webpacker 6.0.0,暂计划后续升级Rails时再替换已弃用的Webpacker,当前遇到两处配置问题:

现有配置文件

app/assets/config/manifest.js内容:

//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link_tree ../builds

报错1:测试用例执行失败

Failure/Error: <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbo-track': 'reload' %>

ActionView::Template::Error:
  Webpacker can't find application.css in /Users/.../public/packs-test/manifest.json. Possible causes:
  1. You want to set webpacker.yml value of compile to true for your environment
     unless you are using the `webpack -w` or the webpack-dev-server.
  2. webpack has not yet re-run to reflect updates.
  3. You have misconfigured Webpacker's config/webpacker.yml file.
  4. Your webpack configuration is not creating a manifest.
  Your manifest contains:
  {
    "application.js": "/packs-test/js/application-5019ada8c79f4945bc85.js",
    "application.js.map": "/packs-test/js/application-5019ada8c79f4945bc85.js.map",
    "entrypoints": {
      "application": {
        "js": [
          "/packs-test/js/application-5019ada8c79f4945bc85.js"
        ],
        "js.map": [
          "/packs-test/js/application-5019ada8c79f4945bc85.js.map"
        ]
      }
    },
    "vendors~actioncable.js": "/packs-test/js/vendors~actioncable-111339b91a6898730a91.chunk.js",
    "vendors~actioncable.js.map": "/packs-test/js/vendors~actioncable-111339b91a6898730a91.chunk.js.map"
  }

报错2:资产预编译失败

Sprockets::DoubleLinkError: Multiple files with the same output path cannot be linked ("tailwind.css")
In "/Users/.../app/assets/config/manifest.js" these files were linked:
  - /Users/.../app/assets/stylesheets/tailwind.css
  - /Users/.../app/assets/builds/tailwind.css
解决方案

1. 修复stylesheet_pack_tag找不到application.css的问题

Webpacker 6默认将CSS嵌入到JavaScript文件中,不再单独输出.css文件,因此manifest里不会生成application.css条目。

可选修复方式:

  • 方式1:改用javascript_pack_tag加载:模板中替换stylesheet_pack_tag为javascript_pack_tag,它会自动处理嵌入的CSS:
    <%= javascript_pack_tag 'application', media: 'all', 'data-turbo-track': 'reload' %>
    
  • 方式2:重新启用CSS提取:修改config/webpack/environment.js,配置CSS提取插件,确保Webpack单独输出CSS文件。示例配置:
    const { environment } = require('@rails/webpacker')
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    
    environment.plugins.append('MiniCssExtractPlugin', new MiniCssExtractPlugin({
      filename: '[name].[contenthash].css'
    }))
    
    module.exports = environment
    
    同时确保config/webpacker.yml中对应环境的extract_css设置为true。

2. 修复Sprockets::DoubleLinkError重复链接问题

问题源于manifest.js同时链接了app/assets/stylesheets和app/assets/builds目录,而tailwind.css同时存在于这两个目录(原文件在stylesheets,Webpack编译后输出到builds),导致Sprockets检测到重复输出路径。

修复方式:修改app/assets/config/manifest.js,移除重复的链接规则。根据你的资产处理逻辑二选一:

  • 如果Webpack负责编译所有CSS(包括tailwind),则移除stylesheets目录的链接:
    //= link_tree ../images
    //= link_directory ../javascripts .js
    //= link_tree ../builds
    
  • 如果Sprockets负责处理stylesheets,限制builds目录只链接JS文件:
    //= link_tree ../images
    //= link_directory ../javascripts .js
    //= link_directory ../stylesheets .css
    //= link_tree ../builds .js
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:20