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
相关产品推荐
相关产品推荐

