You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 7生产环境Turbo导航时JS类Gem无法加载问题求助

Rails 7 Turbo + ESBuild 部署Heroku后组件加载问题解决思路

1. 修复Turbo导航时的JS初始化时机

Turbo的局部DOM更新不会触发传统的DOMContentLoaded或window.load事件,而Recaptcha、Chartkick这类组件默认依赖这些事件完成初始化。需要把初始化逻辑绑定到Turbo的生命周期事件上:

  • Chartkick 处理:在application.js中添加turbo:load事件监听,强制刷新图表:
    document.addEventListener('turbo:load', () => {
      if (typeof Chartkick !== 'undefined') {
        Chartkick.eachChart(chart => chart.refresh())
      }
    })
    
  • Recaptcha 处理:利用turbo:render事件,在DOM更新后手动渲染验证码容器:
    document.addEventListener('turbo:render', () => {
      const recaptchaContainer = document.querySelector('.g-recaptcha')
      if (recaptchaContainer && typeof grecaptcha !== 'undefined') {
        grecaptcha.render(recaptchaContainer, { sitekey: '你的站点密钥' })
      }
    })
    
    注意:要避免重复加载Recaptcha脚本,可在application.js中提前引入,或通过动态脚本加载并做重复判断。

2. 确认ESBuild打包完整性

本地和Heroku的打包环境可能存在差异,需验证依赖是否被正确打包:

  • 确保Gem附带的JS文件被引入到ESBuild入口(app/javascript/application.js):
    import "chartkick"
    import "Chart.bundle"
    import "recaptcha-v2" // 对应Recaptcha Gem的JS路径
    
  • 在Heroku构建日志中检查ESBuild输出,确认这些文件被成功打包。可修改package.json的build命令添加--verbose参数,查看详细打包过程:
    {
      "scripts": {
        "build": "esbuild app/javascript/application.js --bundle --outdir=app/assets/builds --verbose"
      }
    }
    

3. 排查Turbo缓存与DOM残留问题

Turbo的页面缓存可能导致旧DOM未被替换,或组件未在新DOM上初始化:

  • 临时禁用页面缓存测试:在问题页面的<head>中添加<meta name="turbo-cache-control" content="no-cache">,若组件恢复正常,说明缓存是问题根源,需调整缓存策略或在缓存失效时重新初始化组件。
  • 检查页面中是否存在data-turbo-permanent标记的元素,这类元素在Turbo导航时会被保留,可能干扰新组件的渲染。

4. 手动调试验证初始化逻辑

在浏览器控制台手动执行组件初始化代码,比如:

  • 执行Chartkick.eachChart(c => c.refresh())查看图表是否加载
  • 执行grecaptcha.render('.g-recaptcha', { sitekey: '你的密钥' })测试Recaptcha是否渲染
    如果手动执行有效,说明问题确为初始化时机错误,需优化事件绑定逻辑。

5. 检查Heroku资产配置

确认生产环境的资产配置正确:

  • 在config/environments/production.rb中确保config.assets.compile = false(默认值,开启可能导致资产加载异常)
  • 确认config.public_file_server.enabled = true,保证静态资产可被正常访问。

内容的提问来源于stack exchange,提问作者almo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:31:48