升级至无Webpacker的Rails6.0后Heroku生产环境SCSS/Bootstrap未加载
问题解决方案
一、Rails版本与声明不符问题排查
- 首先确认要部署到生产环境的代码分支中,
Gemfile.lock是否已经同步了Rails 6.0的依赖更新,避免仅修改了Gemfile但未生成新的锁文件、或是锁文件未合并到生产分支的情况。 - 清理Heroku生产环境的构建缓存,旧缓存会残留之前的Rails 4.1版本依赖,执行命令
heroku builds:cache:purge -a 你的生产应用名称后重新触发部署,部署过程中注意查看构建日志中Rails版本的安装输出确认版本正确。 - 检查Heroku生产环境的环境变量,确认是否存在
BUNDLE_GEMFILE之类的配置强制加载了旧版本的Gem配置文件。
二、SCSS/Bootstrap未加载问题排查
- 检查Sprockets 4.0所需的
app/assets/config/manifest.js配置,该版本需要显式声明要预编译的静态资源,确保文件中存在以下两行配置:
//= link application.css //= link application.js
如果缺少该配置,生产环境预编译时不会生成对应的css文件,而本地或staging如果开启了assets.compile = true会动态编译资源,所以不会出现问题。
- 确认Heroku生产环境的
RAILS_SERVE_STATIC_FILES环境变量已设置为true,可以通过命令heroku config:get RAILS_SERVE_STATIC_FILES -a 你的生产应用名称查询,该变量为真时应用才会对外提供静态资源访问。 - 查看部署过程的构建日志,确认
rake assets:precompile步骤正常执行无报错,无SCSS路径解析、依赖缺失类的错误输出。如果有通配符导入报错,可以先注释掉application.scss中的@import "**/*";行测试是否是路径匹配问题。 - 检查Heroku的buildpack配置,确保官方Ruby buildpack排在最前,无第三方buildpack干扰资产预编译流程。
内容的提问来源于stack exchange,提问作者Jeroen Swart
相关产品推荐
相关产品推荐

