Heroku部署报错:无法推送部分引用至Git仓库
Rails部署Heroku遇到
pre-receive hook declined错误的排查与解决 核心原因
pre-receive hook declined是Heroku在接收代码前的检查未通过的通用错误,具体原因需要查看完整构建日志才能确定,以下是针对性的排查与解决步骤:
1. 获取完整错误详情
仅看到最终的推送失败提示无法定位问题,必须查看Heroku构建的完整日志:
- 推送时开启详细输出:
git push heroku main -v - 查看最近一次构建的详细信息:
heroku builds:info - 实时追踪应用日志:
heroku logs --tail
2. 确认Ruby版本配置
确保Gemfile中明确指定了Heroku支持的Ruby版本(仅本地环境版本匹配但Gemfile未声明会导致错误):
在Gemfile顶部添加:
ruby '3.1.2'
执行bundle install后,将更新后的Gemfile和Gemfile.lock提交至Git仓库。
3. 检查数据库依赖配置
Heroku不支持SQLite作为生产环境数据库,必须替换为PostgreSQL:
修改Gemfile:
group :development, :test do gem 'sqlite3' end group :production do gem 'pg' end
执行bundle install,提交更新后的Gemfile和Gemfile.lock。
4. 验证资产编译是否正常
Rails 7的资产编译(jsbundling/cssbundling/sprockets)失败会直接终止构建,先在本地模拟生产环境编译:
RAILS_ENV=production rails assets:precompile
如果报错,先解决本地的资产编译问题,再重新推送代码。
5. 检查必要的环境变量
如果应用使用了加密凭证,需将RAILS_MASTER_KEY配置到Heroku:
heroku config:set RAILS_MASTER_KEY=$(cat config/master.key)
同时确保关键环境变量设置正确:
heroku config:set RAILS_ENV=production
6. 重置Heroku远程仓库(可选)
若远程仓库关联存在异常,尝试重新绑定:
git remote remove heroku heroku git:remote -a stormy-reaches-25258
内容的提问来源于stack exchange,提问作者Zekarias Zico
相关产品推荐
相关产品推荐

