Rails 6部署Heroku时Precompiling assets failed报错求解
问题根因
你遇到的报错核心有两个原因:
- Heroku 生产环境默认执行
npm install --production,仅安装package.json中dependencies字段的依赖,你将webpack放在了devDependencies下,生产环境不会安装该依赖,因此触发webpack未找到的报错。 - 你使用的
@rails/webpacker 4.3.0版本仅兼容webpack 4,你安装的webpack 5版本存在适配冲突,也会导致编译失败。
解决步骤
- 调整webpack依赖范围并降级到兼容版本
执行以下命令将webpack从开发依赖移动到生产依赖,同时降级到webpack 4的稳定版本:
npm uninstall --save-dev webpack webpack-dev-server npm install --save webpack@4 webpack-cli
webpack-dev-server是本地开发调试工具,无需放到生产依赖中。
- 检查配置文件完整性
确认你的config/webpack/environment.js文件末尾包含导出语句,你贴出的代码中该行脱离了代码块,避免因遗漏导出导致webpack加载失败:
module.exports = environment
- 本地验证生产编译
在提交代码前先在本地执行生产环境资产预编译,提前排查问题:
RAILS_ENV=production bundle exec rails assets:precompile
如果本地执行无报错,再进行后续部署操作。
- 确认Heroku构建包顺序
Heroku需要先安装Node.js依赖再编译Ruby项目资产,执行以下命令检查构建包顺序:
heroku buildpacks
如果返回结果中heroku/nodejs在heroku/ruby之后,执行以下命令调整顺序:
heroku buildpacks:add --index 1 heroku/nodejs
- 提交代码重新部署
将修改后的package.json、package-lock.json文件提交到Git仓库,再推送到Heroku即可正常部署。
内容的提问来源于stack exchange,提问作者ARTLoe
相关产品推荐
相关产品推荐

