Rails/React应用Heroku部署失败:找不到webpacker的webpack可执行文件
我之前帮不少开发者解决过类似的Heroku部署问题,结合你描述的情况——本地重装Webpack后出现构建失败,且回退提交、新建应用都无效,核心错误无法找到gem webpacker的可执行文件webpack,大概率是webpacker的依赖或构建环境配置出了问题,给你几个针对性的解决步骤:
1. 锁定webpacker版本并同步Gemfile.lock
首先确认你的Gemfile里指定了和之前正常部署一致的webpacker版本(3.2.0):
gem 'webpacker', '~> 3.2.0'
然后在本地运行:
bundle install
这会更新Gemfile.lock,确保Heroku安装的webpacker版本完全匹配。提交Gemfile和Gemfile.lock的变更后重新部署。
2. 重新生成webpacker的binstubs
本地重装Webpack可能会破坏webpacker生成的可执行文件。运行以下命令重新生成:
bundle exec rails webpacker:binstubs
执行后会在项目的bin/目录下生成webpack、webpack-dev-server等文件,把bin/目录的变更提交到Git——Heroku需要这些可执行文件来完成构建。
3. 清理Heroku的构建缓存
Heroku的构建缓存有时候会残留旧的依赖,导致新的webpacker无法正确安装。执行命令清除缓存:
heroku builds:cache:purge
缓存清理完成后,重新触发部署,让Heroku从头开始安装所有依赖。
4. 验证webpack与webpacker的版本兼容性
webpacker 3.x版本需要搭配特定版本的webpack(通常是webpack 4.x),检查你的package.json里的webpack版本是否兼容:
"webpack": "^4.29.6"
如果版本不匹配,调整后运行yarn install(或npm install),提交package-lock.json(或yarn.lock)后重新部署。
5. 确认Heroku Buildpack的顺序
Rails/React应用需要先安装Node.js环境,再安装Ruby依赖。检查你的Heroku buildpack顺序:
heroku buildpacks
如果Node.js buildpack不在第一位,设置正确的顺序:
heroku buildpacks:set heroku/nodejs heroku buildpacks:add heroku/ruby --index 2
完成后重新部署。
这些步骤应该能解决你遇到的构建失败问题,核心是本地环境变更后,Heroku的构建环境没有同步到正确的依赖和可执行文件配置。
内容的提问来源于stack exchange,提问作者zerovolts

