guard-livereload 是个非常棒的工具,做前端开发时会非常方便:修改 view, Javascript 后自动刷新页面,修改 CSS 后热更新 CSS 而不刷新整个页面。
但最近在 Rails 5.0.1 下使用时却不能热更新 CSS 了。加载新 CSS 文件的请求,Rails 竟返回 404:
搜索了一下,有人已给 guard-livereload 提了个 issue,但并没有人提出解决方案,只好自己动手排查了。
过程就不细说了,主要是深入 Rails/Sprockets 的源代码找到处理 assets 请求的代码,粗暴地在 gem 安装目录( ~/.gem/
)下直接修改 sprockets 的代码,输出一些变量的状态以辅助理解代码。
多个原因共同导致 asset 请求返回 404:
在 config/environments/development.rb
中加入或修改
config.assets.digest = false
以禁止在 URL 中包含 digest,从而绕过 Sprockets 的 digest 验证。
我在原 issue 中也贴出了解决方案,欢迎围观。