Rails 5.2与Webpacker 3.4.3部署Heroku时资源未编译报错
解决Rails 5.2 + Webpacker 3.4.3部署Heroku后找不到vendor.js的问题
我之前升级Webpacker版本部署到Heroku时也碰到过类似的找不到pack文件的问题,结合你的情况,给你几个具体的排查和解决步骤:
1. 先在本地复现并确认pack文件是否能正常生成
首先别直接去Heroku上瞎试,先在本地模拟production环境的编译流程,确认问题出在哪:
- 先安装所有依赖:
yarn install - 手动执行Webpack编译:
RAILS_ENV=production bin/webpack - 然后跑资产预编译:
RAILS_ENV=production bundle exec rake assets:precompile - 检查
public/packs目录下是否生成了vendor.js和对应的manifest.json,并且manifest里有vendor.js的条目。
如果本地都没生成,那问题出在本地配置:
- 确认
app/javascript/packs/vendor.js确实存在,并且没有语法错误(比如引入了不存在的模块) - 检查
config/webpacker.yml里的source_path是否设为app/javascript,public_output_path是否为packs,production环境的compile可以暂时设为true(方便调试,后续再改回false)
2. 确保Heroku的Buildpack顺序正确
Heroku需要先安装Node依赖再编译Rails资产,所以必须把nodejs buildpack放在ruby前面:
- 查看当前buildpack:
heroku buildpacks - 如果顺序不对,调整顺序:
heroku buildpacks:add --index 1 heroku/nodejs heroku buildpacks:add --index 2 heroku/ruby
3. 指定兼容的Node版本
Webpacker 3.4.3对Node版本有要求(建议用Node 8.x~12.x,太高的版本会不兼容),在package.json里添加engines字段:
"engines": { "node": "10.x", "yarn": "1.x" }
然后推送到Heroku,它会自动使用指定的版本。
4. 检查Heroku的编译日志
部署时通过日志看具体哪里出错:
heroku logs --tail
搜索webpacker:compile关键词,看是否有编译错误(比如依赖缺失、webpack配置报错),这些错误会导致vendor.js没生成,进而触发你看到的找不到文件的报错。
5. 确认production环境的Webpacker配置
最后检查config/webpacker.yml的production部分:
- 如果本地预编译正常,但Heroku上还是没生成,确保
compile设为false(因为预编译阶段已经生成了packs,开compile会让Rails在运行时尝试编译,Heroku的文件系统是只读的,会失败) - 确认
cache_manifest: true,确保Rails能正确读取manifest.json里的文件路径
按照上面的步骤一步步排查,应该能解决找不到vendor.js的问题。
内容的提问来源于stack exchange,提问作者Yannis
相关产品推荐
相关产品推荐

