Rails 6使用wicked_pdf生成PDF报qr-code.js资源缺失该如何解决
问题根因
Rails 6默认同时使用两套资源管理体系:
- Webpacker:负责管理
app/javascript目录下的资源,通过javascript_pack_tag引用 - Sprockets资产管道:负责管理
app/assets目录下的资源,通过javascript_include_tag引用
wicked_pdf_javascript_include_tag默认走Sprockets的资源查找逻辑,你的qrcode.js存放在Webpacker管理的packs目录下,Sprockets无法识别,所以修改文件名也无法解决问题。
修复方案
方案1(推荐):使用Webpacker适配的wicked_pdf引用标签
直接将模板第2行的引用语句替换为:
<%= wicked_pdf_javascript_pack_tag 'qrcode' %>
该标签会自动匹配Webpacker管理的app/javascript/packs下的资源,同时适配PDF渲染的资源路径处理。如果你的wicked_pdf版本低于1.4不支持该标签,可以改用兼容写法:
<%= javascript_pack_tag 'qrcode', helper: 'wicked_pdf' %>
方案2:将资源迁移到Sprockets管理路径
把./app/javascript/packs/qrcode.js文件复制到./app/assets/javascripts/qrcode.js,保持修改后的引用语句<%= wicked_pdf_javascript_include_tag "qrcode" %>即可正常生效。
缓存清理操作(修改后仍报错时执行)
按顺序执行以下命令清理所有缓存:
- 清理Webpacker打包缓存:
bin/rails webpacker:clobber - 清理Rails临时缓存:
bin/rails tmp:clear - 生产环境需重新预编译资源:
bin/rails assets:precompile
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

