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

升级至Heroku-22后Ruby on Rails代码推送失败求助

解决Heroku栈升级到heroku-22后推送代码失败的问题

问题分析

报错ArgumentError: tried to create Proc object without a block通常是旧环境下的gem或代码与heroku-22默认的Ruby/Rails版本不兼容导致的。heroku-22使用的Ruby版本(默认2.7+)比heroku-18更高,部分旧gem在新版本Ruby下会出现Proc定义的语法或逻辑错误。

解决方案

1. 本地复现错误并获取完整栈追踪

在本地生产环境下执行以下命令,复现Heroku的报错,拿到详细的错误栈,定位具体触发问题的代码或gem:

RAILS_ENV=production bundle exec rake -P

完整的栈追踪会明确指出是哪个文件、哪一行代码引发的Proc错误,这是排查的核心依据。

2. 对齐Ruby和Rails版本与heroku-22兼容

  • 检查Gemfile中指定的Ruby版本,heroku-22支持Ruby 2.7及以上版本,如果项目使用2.5或更低版本,需要升级Ruby并调整Gemfile中的ruby 'x.x.x'配置。
  • 若使用Rails 5.x及更早版本,注意部分旧版Rails与Ruby 3.x存在兼容性问题,可选择升级Rails到适配版本,或锁定Ruby到2.7.x版本。

3. 升级或替换引发错误的gem

根据本地栈追踪定位到具体gem后:

  • 查看该gem的官方文档或GitHub仓库,确认是否有适配Ruby 2.7+的版本,执行bundle update [gem-name]完成升级。
  • 如果该gem已停止维护,寻找功能替代的现代gem。

4. 检查项目自定义代码中的Proc定义

如果错误来自项目自身代码,排查所有使用Proc.new或lambda的地方,确保没有出现“创建Proc但未传入代码块”的情况:

  • 错误示例:Proc.new(缺少执行块)
  • 正确示例:Proc.new { do_something } 或 lambda { do_something }

5. 清除Heroku缓存并重新推送

Heroku的缓存可能残留旧环境的依赖文件,执行以下命令清除缓存后重新推送代码:

heroku repo:purge_cache -a your-app-name
git push heroku main

6. 重置Ruby Buildpack

确保Heroku使用官方的Ruby构建包,执行以下命令后重新推送:

heroku buildpacks:set heroku/ruby -a your-app-name
git push heroku main

内容的提问来源于stack exchange,提问作者bernard yves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:01:35