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

Rails 7部署Heroku生产环境后realdomain.com的Turbolinks失效问题

环境配置
  • Rails 7 应用,通过sprockets加载/编译Turbolinks
  • 本地开发环境:localhost
  • Heroku预发布环境:appstaging.herokuapp.com
  • Heroku生产环境(语言1):appprod1.herokuapp.com + realdomain.com
  • Heroku生产环境(语言2):appprod2.herokuapp.com + realdomain.es

realdomain.com和realdomain.es均通过Cloudflare访问

问题现象

Turbolinks在以下场景均正常工作:

  • 本地开发环境
  • Heroku预发布环境
  • 通过appprod1.herokuapp.com、appprod2.herokuapp.com访问生产环境
  • 通过realdomain.es访问生产环境

但通过realdomain.com访问时,Turbolinks完全失效(已在多客户端/设备验证):

  • 浏览器开发者工具确认application.js已正确加载Turbolinks代码
  • 点击链接时采用HTTP全页加载而非XHR请求
  • turbolinks:load事件未触发
  • 其他JS功能运行正常
排查与修复方案

1. 对比Cloudflare配置差异

重点检查realdomain.com与realdomain.es的Cloudflare配置区别:

  • 缓存/页面规则:确认realdomain.com是否开启HTML缓存、自动优化类规则,这类规则可能篡改页面内容或响应头,导致Turbolinks异常。临时禁用相关规则测试。
  • Rocket Loader:该功能会延迟加载JS,可能打乱Turbolinks初始化顺序。检查realdomain.com是否开启此功能,临时关闭验证。
  • 响应头对比:查看两个域名返回的Content-Type、Cache-Control等头信息,确保realdomain.com的HTML响应头为text/html; charset=utf-8,无异常缓存指令。

2. 验证Turbolinks初始化状态

在realdomain.com页面的开发者工具控制台执行以下命令,确认Turbolinks是否正常初始化:

Turbolinks.supported // 预期返回true
Turbolinks.controller // 预期返回Turbolinks.Controller实例

若返回异常,排查页面中是否有其他JS代码篡改window.Turbolinks或干扰DOM事件绑定。

3. 检查链接与Turbolinks触发条件

确认realdomain.com的页面链接符合Turbolinks触发要求:

  • 链接为同域地址,未添加data-turbolinks="false"属性
  • 在控制台执行Turbolinks.visit('/目标路径'),观察是否触发XHR加载
  • 核对turbolinks-rails gem版本与前端Turbolinks版本是否匹配,避免版本兼容问题

4. 检查Heroku域名与应用配置

  • 确认realdomain.com在Heroku的域名绑定是否正确,是否存在重定向规则(如HTTP转HTTPS)导致Turbolinks无法追踪页面状态,临时禁用重定向测试。
  • 检查config/environments/production.rb中是否针对realdomain.com有特殊的JS压缩或资源加载配置,确认未因压缩规则破坏Turbolinks代码。

5. 排除客户端缓存影响

使用浏览器无痕模式访问realdomain.com,或强制刷新页面(Ctrl+Shift+R),排除客户端缓存残留的旧代码干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:52:45