求助:排查网站全局加载star-rating.min.js.map路由错误的方法
排查Rails中全局触发的缺失JS Map资源问题
嘿,我来帮你理清楚怎么找出这个让所有页面都报错的star-rating.min.js.map来源。先看看你遇到的错误日志:
Started GET "/assets/star-rating.min.js.map" for ::1 at 2018-01-26 08:18:34 -0500 ActionController::RoutingError (No route matches [GET] "/assets/star-rating.min.js.map"): web-console (2.0.0.beta3) lib/action_dispatch/debug_exceptions.rb:22:in `middleware_call' web-console (2.0.0.beta3) lib/action_dispatch/debug_exceptions.rb:13:in `call' # 剩余日志内容省略...
下面是几个实用的追踪步骤,按优先级来:
1. 用浏览器开发者工具直接定位发起者
这是最快的方法:
- 打开浏览器的开发者工具(按F12),切换到
Network标签页; - 刷新任意页面,找到状态为404的
star-rating.min.js.map请求; - 点击这个请求,查看
Initiator(发起者)面板——这里会明确显示是哪个文件(比如某个JS脚本、页面模板)触发了这个资源加载; - 另外,也可以在
Sources标签页的搜索框里输入star-rating,直接找到引用相关文件的代码位置。
2. 全局搜索项目代码
打开终端,到你的Rails项目根目录,执行全局搜索命令:
# 直接搜索map文件名 grep -r "star-rating.min.js.map" .
如果没找到结果,大概率是浏览器自动请求的——因为当你加载压缩后的star-rating.min.js时,浏览器会自动尝试加载对应的map文件用于调试。这时候搜索压缩版JS的引用:
grep -r "star-rating.min.js" .
这个命令会遍历项目所有文件,找出所有引入这个JS的地方,包括ERB模板、JS文件、甚至gem里的资产文件。
3. 检查全局布局和资产主文件
既然所有页面都触发这个请求,肯定是全局引入的:
- 先看
app/views/layouts/application.html.erb(或者你用的其他全局布局),检查里面的<script>标签或者javascript_include_tag,有没有引入star-rating相关的资源; - 再看
app/assets/javascripts/application.js,看看有没有通过//= require引入这个库; - 如果是第三方gem带来的,查看
Gemfile里有没有星级评分相关的gem,然后去该gem的资产目录里看看是否包含这个map文件。
4. 补充:关于浏览器自动请求map文件的说明
如果是浏览器自动发起的请求(不是你主动引入map文件),你有两个选择:
- 不需要调试的话,直接忽略这个错误就行,或者在
config/environments/production.rb里关闭资产调试模式; - 需要调试的话,把对应的
star-rating.min.js.map文件放到app/assets/javascripts目录下,让Rails资产管道能正确编译它。
内容的提问来源于stack exchange,提问作者Jeremy Thomas
相关产品推荐
相关产品推荐

