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

Rails 7+React同应用部署至Heroku失败求助

错误含义

浏览器尝试加载ES模块类型的JavaScript文件时,服务器返回的内容MIME类型是text/html,而非JavaScript模块要求的application/javascript或对应正确类型。根据HTML规范,浏览器会严格校验模块脚本的MIME类型,因此直接拒绝加载该脚本。
核心原因通常是:请求的JS文件路径不存在,服务器找不到文件后返回了404错误的HTML页面,而非预期的JS文件内容。

修复方案
  • 确认前端构建产物路径
    如果你用Rails 7的jsbundling-rails配合React,先在本地执行rails assets:precompile,检查public/assets目录下是否生成了正确的JS打包文件。同时确保package.json中的build命令正确(比如Vite对应"build": "vite build",Webpack对应"build": "webpack build"),Heroku部署时会自动执行这个命令生成产物。
  • 校验页面脚本引入方式
    不要硬写JS文件的绝对路径,改用Rails提供的辅助方法生成正确路径:比如用vite_javascript_tag 'application'(Vite场景)或javascript_importmap_tags(Importmap场景),避免路径错误导致服务器返回404页面。
  • 检查Rails生产环境配置
    在config/environments/production.rb中,确保config.public_file_server.enabled = true,保证静态文件能被正确服务。如果使用jsbundling预编译资源,将config.assets.compile设为false,避免Rails在运行时重新编译资源。
  • 验证Heroku构建流程
    查看Heroku的build日志,确认前端依赖(Node.js包)是否安装成功,npm run build是否正常执行并生成了产物。如果构建失败,根据日志提示修复依赖问题;必要时可以在Procfile中明确构建步骤。
  • 排查路由冲突
    如果是React单页应用,确保Rails路由配置了catch-all规则(比如get '*path', to: 'application#index'),但要注意不要让自定义路由匹配静态文件路径(如/assets),否则服务器会返回HTML页面而非静态JS文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:15:56