Rails 6.1升级至7.1.3后Sprockets找不到jquery-1.7文件求助
Rails 7.1.3 升级后 Sprockets 找不到 jquery-1.7 的解决办法
问题背景
已上线的Rails 6.1项目升级至7.1.3版本,保留使用sprockets-rails维护原有asset pipeline。执行bundle exec rake assets:precompile时触发Sprockets::FileNotFound错误,提示找不到类型为application/javascript的'jquery-1.7'文件,错误定位到app/assets/javascripts/mercury.js第10行。因项目无法修改现有业务代码,需通过配置Sprockets修复资产编译流程。
错误日志
bundle exec rake assets:precompile rake aborted! Sprockets::FileNotFound: couldn't find file 'jquery-1.7' with type 'application/javascript' (Sprockets::FileNotFound) Checked in these paths: /Users/rabeyakhatunmuna/Documents/expertiger-app/app/assets/config ...(省略部分路径) /Users/rabeyakhatunmuna/Documents/expertiger-app/app/assets/javascripts/mercury.js:10 Tasks: TOP => assets:precompile
现有配置
Gemfile
source 'https://rubygems.org' git_source(:github) { |name| "https://github.com/#{name}.git" } ruby '3.2.2' gem 'pg', '~> 1.2', '>= 1.2.5' gem 'rails', '7.1.3' ...(省略部分gem) gem 'jquery-rails' ...(省略其他配置)
app/assets/javascripts/application.js.coffee
#= require common/rollbar #= require jquery #= require common/rollbar-jquery #= require jquery_ujs ...(省略其他require)
app/assets/stylesheets/application.scss
/* ... *= require jquery-ui/slider *= require jquery-star-rating *= require application/bootstrap_and_overrides */
解决步骤
1. 确保jquery-rails与Rails 7.1兼容
检查Gemfile中jquery-rails的版本,需使用适配Rails 7.x的版本(推荐>=4.4.0)。执行以下命令更新至兼容版本:
bundle update jquery-rails
2. 添加Sprockets别名映射
在config/initializers/assets.rb中添加别名,将jquery-1.7映射到jquery-rails提供的标准jquery文件,无需修改原代码中的依赖声明:
# 注册别名,让Sprockets识别jquery-1.7为jquery-rails提供的jquery Sprockets.register_alias 'jquery-1.7', 'jquery' # 确保jquery被加入预编译列表(若未添加) Rails.application.config.assets.precompile += %w( jquery.js )
3. (可选)添加本地资产路径(若项目使用本地jquery文件)
如果项目原本将jquery-1.7存放在自定义目录(如app/assets/javascripts/vendor),需将该目录添加到Sprockets的资产搜索路径中:
# 在config/initializers/assets.rb中添加 Rails.application.config.assets.paths << Rails.root.join('app/assets/javascripts/vendor')
4. 清理缓存并重新编译
执行以下命令清理旧的资产编译缓存,再重新执行预编译:
bundle exec rake assets:clobber bundle exec rake assets:precompile
内容的提问来源于stack exchange,提问作者Rabeya Khatun Muna
相关产品推荐
相关产品推荐

