部署Rails应用至Heroku遇application.css资源缺失问题求助
解决Rails部署Heroku时ActionView::Template::Error (application.css不在asset pipeline中)的问题
核心修复步骤
1. 修正app/assets/config/manifest.js配置
必须在清单中明确声明要预编译的SCSS文件,Rails的Sprockets依赖这个清单识别需要处理的资产:
//= link_tree ../images //= link_directory ../stylesheets .css //= link application.scss // 新增这一行
添加后,Sprockets会将application.scss编译为application.css,预编译时生成带哈希的生产版本。
2. 确保application.scss的正确结构
移除所有Sprockets的*=指令,仅保留Sass的@import语法:
// 移除所有 *= require 或 *= require_tree 之类的语句 @import "bootstrap"; // 自定义样式写在下方
3. 本地预编译验证
先在本地生产环境执行预编译,确认能生成正确的CSS文件:
RAILS_ENV=production rails assets:precompile
检查public/assets目录,确认生成了类似application-<随机哈希>.css的文件。如果本地生成失败,排查依赖问题(比如缺少sass-rails或bootstrap gem)。
4. 检查Heroku构建日志
部署后查看Heroku的资产预编译过程,确认没有报错:
heroku logs --tail | grep "assets:precompile"
如果日志中出现编译失败提示(比如找不到Bootstrap模块、Sass语法错误),针对性修复后重新部署。
5. 确认config/environments/production.rb的关键配置
确保生产环境的静态资产配置正确:
config.public_file_server.enabled = true config.assets.compile = false # 禁用动态编译,依赖预编译文件 config.assets.digest = true # 启用哈希文件名,避免缓存问题
6. 清理Heroku缓存
如果之前的部署缓存导致旧配置残留,执行缓存清理后重新部署:
heroku repo:purge_cache git push heroku main
7. 确认Gemfile依赖完整性
确保Gemfile中包含必要的资产处理依赖:
gem "bootstrap" gem "sass-rails"
执行bundle install后再推送代码到Heroku。
内容的提问来源于stack exchange,提问作者TheCodeSommelier
相关产品推荐
相关产品推荐

