You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:25:28