从Rails 6.1移除Webpacker后出现Sprockets资源未预编译错误求助
问题修复方案
核心原因
Rails 6+ 携带--webpacker参数生成的项目会默认禁用Sprockets资产管道的部分默认配置,将静态资源处理全托管给Webpacker,移除Webpacker后需要补全原生资产管道的相关配置才能正常工作。
分步修复操作
- 第一步:检查Gemfile依赖
确认Gemfile中存在以下依赖且未被注释,执行bundle install确保安装生效:gem 'sprockets-rails' gem 'sass-rails' - 第二步:开启Sprockets加载
打开config/application.rb,确认存在以下代码(如果被注释请取消注释):require "sprockets/railtie" - 第三步:补全资产预编译配置
打开config/initializers/assets.rb,添加以下配置,指定需要预编译的入口文件:
注:Sprockets会自动识别Rails.application.config.assets.precompile += %w( application.js application.css ).scss后缀文件并编译为.css,不需要在配置里指定scss后缀 - 第四步:检查开发环境配置
打开config/environments/development.rb,确认资产实时编译配置为开启状态:config.assets.compile = true - 第五步:检查入口文件指令
确认app/assets/javascripts/application.js头部存在资源加载指令,示例:
确认//= require rails-ujs //= require turbolinks //= require_tree .app/assets/stylesheets/application.scss头部存在资源加载指令(如果用Sprockets托管依赖),示例:/* *= require_tree . *= require_self */ - 第六步:清理缓存重启服务
执行以下命令清理旧资产缓存后重启Rails服务即可:rails tmp:cache:clear rails assets:clobber
内容的提问来源于stack exchange,提问作者devleo
相关产品推荐
相关产品推荐

