Rails应用部署至Heroku时构建失败,寻求技术支持
先明确你的问题场景:
我在开发期间一直定期将Rails应用部署至Heroku,此前均无问题。仅对HTML和CSS做了几处微小修改后,构建便失败了,但应用在本地运行正常。我已回滚至此前构建成功的提交版本,却仍出现相同错误。以下是构建日志的顶部内容:
-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby ...
这种情况我碰到过好几次,大概率是Heroku环境的缓存、版本配置或者依赖问题,和你改的HTML/CSS关系不大,给你几个逐步排查的方案:
核对Ruby版本是否匹配
有时候Heroku会自动升级默认Ruby版本,哪怕你回滚了代码,也可能因为版本不兼容导致构建失败。先看你项目根目录Gemfile里的Ruby声明:ruby '3.2.2' # 替换成你的实际版本号再对比构建日志里
Using Ruby ...后面的版本,如果不一致,要么更新Gemfile的版本号,要么用命令给Heroku指定版本:heroku config:set RUBY_VERSION=3.2.2 -a 你的应用名称强制清理Heroku缓存
缓存残留是这类问题的高发原因,旧的编译文件或依赖缓存会干扰新的构建,哪怕你回滚了代码也没用。执行以下命令清理缓存:heroku repo:purge_cache -a 你的应用名称清理完之后重新部署:
git push heroku main检查依赖包的兼容性
虽然你只改了前端代码,但Gemfile.lock里的依赖可能在Heroku的环境下出现安装失败的情况。可以本地重新生成依赖锁文件:bundle install --deployment如果Gemfile.lock有变化,提交这个更新,再重新部署到Heroku。
查看完整的构建日志
你提供的日志顶部没有关键错误信息,完整日志里肯定会有具体的失败原因(比如某个gem安装失败、资产编译报错等)。你可以用命令拉取完整日志:heroku logs --tail --app 你的应用名称或者直接去Heroku控制台的应用页面,找到「Logs」选项查看完整构建记录,重点找带
ERROR或Failed的行,这是定位问题的核心。模拟生产环境的资产编译
有时候本地开发环境的资产配置和Heroku的生产环境不一样,导致本地正常但Heroku编译失败。你可以在本地模拟生产环境编译资产:RAILS_ENV=production bundle exec rake assets:precompile如果这一步出错,说明资产配置有问题,修复后再部署即可。
内容的提问来源于stack exchange,提问作者Robert Deignan

