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

Ruby on Rails:Stimulus与Slim-select、Tailwind在DO生产环境异常

解决DigitalOcean App Platform上Rails应用Import Maps与Stimulus资源加载问题

针对你遇到的Import Maps失效、Stimulus控制器路径触发ActionController::RoutingError的问题,按以下步骤排查修复:

1. 确认Asset预编译流程

  • 检查部署阶段是否执行了rails assets:precompile:DigitalOcean App Platform默认会自动执行,但如果自定义了构建命令,务必确保包含该步骤。
  • 验证public/assets目录是否生成了正确的预编译文件:应该存在manifest.json,以及带哈希后缀的Stimulus控制器文件(如removals_controller-xxxxxx.js)。如果缺失,说明预编译未成功执行。

2. 修正Import Maps与Stimulus配置

  • 确保config/importmap.rb中正确映射控制器路径:
    pin_all_from "app/javascript/controllers", under: "controllers"
    
  • 检查app/javascript/controllers/index.js的控制器注册逻辑,确保所有控制器被正确加载:
    import { application } from "controllers/application"
    import * as controllers from "./**/*_controller.js"
    Object.entries(controllers).forEach(([name, controller]) => {
      if (name !== "application") {
        application.register(name, controller)
      }
    })
    

3. 适配CDN与静态资源路径

  • 在config/environments/production.rb中配置正确的asset_host,确保资源请求指向CDN或应用域名:
    config.asset_host = ENV.fetch("ASSET_HOST") { "https://your-production-domain.com" }
    
  • 确认静态文件服务器配置:
    config.public_file_server.enabled = true
    config.public_file_server.headers = {
      "Cache-Control" => "public, max-age=31536000"
    }
    
  • 检查DigitalOcean App Platform的静态资源设置:进入应用控制台的「Settings」→「Static Assets」,确认/assets/*路径被正确映射到public/assets目录。

4. 强制清除部署缓存

  • 除了本地执行rails importmap:cache:clear,还需要在DigitalOcean控制台触发重新部署,并勾选「Rebuild from scratch」选项,彻底清除平台端的缓存文件。

5. 验证前端请求路径

  • 查看生产环境页面源码,确认Stimulus控制器的请求路径是带哈希后缀的预编译版本,而非原始的/assets/controllers/removals_controller.js。如果请求的是未哈希路径,说明Import Maps未生成正确的映射,或预编译流程存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:05:02