修复jquery-tmpl-rails触发的Sprockets `register_engine`弃用警告
解决jquery-tmpl-rails触发Sprockets弃用警告的问题
刚巧我之前也碰到过一模一样的问题,结合你的技术栈情况,给你整理几个可行的解决思路:
你的当前技术栈
- Ruby 2.4.3
- Rails 5.1.3
- sprockets 3.7.3
- jquery-tmpl-rails 1.1.0
问题详情
你看到的警告信息是:
DEPRECATION WARNING: Sprockets method
register_engineis deprecated. Please register a mime type usingregister_mime_typethen useregister_compressororregister_transformer.
问题根源
这个警告是因为jquery-tmpl-rails 1.1.0版本还在使用Sprockets已经弃用的register_engine API,而你的Sprockets 3.7.3已经开始推行新的扩展规范——需要先注册对应的MIME类型,再注册转换器或者压缩器。
解决方案
1. 优先升级jquery-tmpl-rails
首先确认jquery-tmpl-rails有没有更新版本修复了这个兼容性问题。如果有的话,直接在Gemfile里更新版本:
gem 'jquery-tmpl-rails', '>= [找到的最新兼容版本号]'
然后运行bundle update jquery-tmpl-rails,更新完成后警告应该就消失了。
2. 手动打补丁(暂时无法升级时用)
如果暂时找不到合适的升级版本,你可以在项目里加一个初始化文件来替换旧的注册逻辑:
- 在
config/initializers目录下新建一个文件,比如sprockets_jquery_tmpl_patch.rb - 把下面的代码粘贴进去:
# 先移除旧的引擎注册(如果存在) Sprockets.register_engine '.tmpl', nil if Sprockets.respond_to?(:register_engine) # 注册tmpl文件对应的MIME类型 Sprockets.register_mime_type 'text/x-jquery-tmpl', extensions: ['.tmpl'] # 注册转换器,把tmpl文件转换成JavaScript Sprockets.register_transformer 'text/x-jquery-tmpl', 'application/javascript', ->(input) { # 这里复用了jquery-tmpl-rails原本的转换逻辑 "jQuery.template(#{input[:filename].inspect}, #{input[:data].inspect});" }
保存后重启服务器,警告就应该不会再出现了。
3. 降级Sprockets(不推荐)
虽然可以把Sprockets降级到还支持register_engine的旧版本,但这会错过Sprockets后续的bug修复和性能优化,所以只建议作为临时应急方案。
内容的提问来源于stack exchange,提问作者Nick Schwaderer
相关产品推荐
相关产品推荐

