You need to enable JavaScript to run this app. Rails中Devise登录页用video_tag嵌视频遇资源未预编译报错
优惠活动
大模型
产品
解决方案
定价
更多

Rails中Devise登录页用video_tag嵌视频遇资源未预编译报错

问题核心原因

你遇到的Sprockets::Rails::Helper::AssetNotPrecompiled报错,本质是Rails 6默认资源加载规则导致的:

  • 在application.rb中将app/assets/videos加入Sprockets扫描路径的操作是正确的,但Rails默认仅自动识别JS、CSS、常见图片后缀的文件为可预编译资源,.mp4这类大体积媒体文件不会被自动纳入白名单
  • 仅设置config.assets.debug = false只是关闭了开发环境下的资源拆分加载逻辑,并不会跳过“资源必须预编译才能被helper引用”的校验规则,因此报错不会消失
分步修复操作
  • 手动将视频文件加入资源预编译白名单
    打开config/initializers/assets.rb,在文件末尾追加配置:
    Rails.application.config.assets.precompile += %w( login-video.mp4 )
    
    后续如果新增其他视频资源,直接在数组中追加对应文件名即可。
  • 修正视图中video_tag的参数写法
    原代码中传入Symbol类型的布尔属性不是Rails helper推荐的兼容写法,调整为直接传布尔值,可保证所有浏览器正常识别媒体标签属性:
    <%= video_tag 'login-video.mp4', autoplay: true, loop: true, muted: true %>
    
  • 执行本地资源预编译并重启服务
    在项目根目录执行命令:
    rails assets:precompile
    
    执行完成后重启Rails服务,即可正常加载登录页视频,不会再抛出未预编译的报错。
  • 可选优化:减少重复配置
    如果项目内视频资源较多,不想每次新增视频都手动修改白名单,可以在assets.rb中配置自动扫描规则,将app/assets/videos目录下所有mp4文件自动纳入预编译范围:
    Rails.application.config.assets.precompile += Dir[Rails.root.join('app', 'assets', 'videos', '*.mp4')]
    

内容的提问来源于stack exchange,提问作者raphael-allard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 23:54:00