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

ActiveSupport Gem弃用警告及Rails控制台栈溢出问题求助

解决Rails 4.2.6 + Ruby 2.4.1启动控制台时的栈溢出错误

你遇到的这个问题本质是Ruby 2.4.x和Rails 4.2.6的版本兼容性冲突,具体原因和解决方案如下:

问题根源

Ruby 2.4.0开始移除了Fixnum和Bignum这两个常量,统一合并成了Integer。但Rails 4.2.6的activesupport组件里的numeric/conversions.rb文件仍然依赖这两个废弃的常量,在初始化时触发了无限递归调用,最终导致stack level too deep (SystemStackError)错误——那些重复的block (2 levels) in <class:Numeric>就是递归的直接表现。

可行的解决方案

方案1:升级Rails到兼容版本(推荐)

Rails官方在4.2.11版本修复了对Ruby 2.4+的兼容问题,这是最稳妥的解决方式:

  • 打开项目根目录的Gemfile,把gem 'rails', '4.2.6'修改为gem 'rails', '~> 4.2.11'
  • 运行命令bundle update rails更新依赖
  • 之后再尝试启动控制台:rails c

方案2:添加初始化补丁(临时应急)

如果暂时无法升级Rails,可以通过添加初始化补丁来绕过递归问题:

  • 在项目的config/initializers目录下新建一个文件,比如fix_numeric_recursion.rb
  • 把以下代码粘贴进去:
    class Numeric
      def to_formatted_string(format = nil, options = {})
        return to_s if format.nil?
    
        case format.to_sym
        when :db
          if respond_to?(:in_time_zone)
            in_time_zone.to_s(:db)
          else
            to_s
          end
        else
          to_s
        end
      end
      alias_method :to_fs, :to_formatted_string
    end
    
  • 保存后重新启动控制台,这个补丁会覆盖掉原有的有问题的方法,避免无限递归。

方案3:降级Ruby版本(不推荐)

如果以上两种方式都无法实施,可以考虑把Ruby版本降级到2.3.x(比如2.3.8),因为Ruby 2.3还保留了Fixnum和Bignum常量,能和Rails 4.2.6正常兼容。不过注意Ruby 2.3已经停止安全维护,长期来看存在安全风险。

另外你提到已经停止了Spring服务,这个问题和Spring无关,所以停不停Spring都不会影响这个报错的出现~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:47:48