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

Rails 7部署Heroku后无法加载编译后资产文件问题求助

Rails 7部署Heroku后Stimulus控制器加载失败的解决办法

你遇到的核心问题是:生产环境中应用直接请求未编译的Stimulus控制器原文件(如/assets/controllers/openinghours_controller.js),但Rails 7在Heroku上只会提供预编译后带哈希的资产文件,导致路由错误。按以下步骤排查修复:

1. 确认资产加载方式的配置正确性

Rails 7默认用Importmap或JS Bundling(esbuild),对应不同的配置要求:

  • Importmap场景:
    打开config/importmap.rb,确保包含:
    pin_all_from "app/javascript/controllers", under: "controllers"
    
    同时app/javascript/application.js必须导入控制器:
    import "controllers"
    
  • JS Bundling(esbuild)场景:
    检查package.json的build命令是否正确编译所有JS文件:
    "scripts": {
      "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds --public-path=assets"
    }
    
    并确保application.html.erb引用的是编译后的合并文件:
    <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
    

2. 修正Production环境的资产配置

Rails 7已弃用config.serve_static_files,改用public_file_server,打开config/environments/production.rb:

# 启用静态文件服务
config.public_file_server.enabled = true
# 禁用动态资产编译,生产环境仅用预编译文件
config.assets.compile = false
# 确保资产文件名带哈希,避免缓存问题
config.assets.digest = true

3. 验证Stimulus控制器的注册逻辑

检查app/javascript/controllers/index.js,确保正确注册所有控制器:

import { Application } from "@hotwired/stimulus"
const application = Application.start()

import { definitionsFromContext } from "@hotwired/stimulus-webpack-helpers"
application.load(definitionsFromContext(require.context("./", true, /\.js$/)))

如果是新初始化的项目,确认已执行rails stimulus:install完成Stimulus的配置。

4. 确保Heroku预编译流程正常

  • 本地先执行rails assets:precompile,查看public/assets目录下是否生成带哈希的控制器相关资产文件。
  • 检查.gitignore,不要忽略app/assets/builds(JS Bundling)或public/assets(Importmap),否则Heroku无法获取编译后的文件。
  • 部署时查看Heroku日志,确认rake assets:precompile步骤无报错。

5. 清理Heroku缓存并重新部署

有时候缓存会导致旧配置残留,执行以下命令强制清理:

heroku builds:cache:purge
git commit --allow-empty -m "Clear Heroku cache"
git push heroku main

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:54