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

Rails 7部署Heroku后JS资源缺失无法运行问题求助

Rails 7.0.4 + Import Maps 部署Heroku后JS 404问题解决

针对你遇到的部署Heroku后JS资源404(CSS正常)、仅开启config.assets.compile = false可临时解决的问题,以下是具体排查和修复步骤:

1. 确认Heroku资产预编译流程正常执行

  • 查看Heroku部署日志,确认是否存在Running: rake assets:precompile记录。如果没有:
    • 检查是否误设置了SKIP_ASSET_COMPILATION环境变量,执行heroku config:get SKIP_ASSET_COMPILATION,若返回true则执行heroku config:unset SKIP_ASSET_COMPILATION移除该变量。
    • 确保config/environments/production.rb中config.assets.enabled = true未被注释(Rails 7默认开启,但需确认配置未被修改)。

2. 验证Import Maps配置正确性

  • 检查config/importmap.rb,确认所需模块已正确pin:
    pin "bootstrap", to: "https://ga.jspm.io/npm:bootstrap@5.2.3/dist/js/bootstrap.esm.js"
    pin_all_from "app/javascript/controllers", under: "controllers"
    
  • 确认app/javascript/application.js中正确导入模块:
    import "bootstrap"
    import "controllers"
    
  • 本地预编译验证:执行RAILS_ENV=production rails assets:precompile,查看public/assets目录下是否生成importmap.json及相关编译后的JS文件。若本地预编译失败,根据报错修复依赖问题(比如缺失对应npm包)。

3. 修正生产环境配置

  • 在config/environments/production.rb中确保以下配置:
    config.public_file_server.enabled = true
    config.assets.compile = false # 保持关闭,这是生产环境的合理配置
    config.assets.digest = true # 默认开启,确保资产文件名带哈希,避免缓存冲突
    

4. 检查Heroku服务器上的资产文件

  • 执行heroku run bash进入dyno,查看public/assets目录:
    ls public/assets
    
    若缺少importmap.json或相关JS文件,手动执行预编译并查看报错:
    RAILS_ENV=production rails assets:precompile
    
    根据报错排查问题(比如Bootstrap的npm包未正确安装、文件权限问题等)。

5. 避免资产管理方式混用

  • Rails 7默认用Import Maps管理JS,不要将JS文件放在app/assets/javascripts目录下,统一放在app/javascript下,避免Sprockets和Import Maps冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:32:11