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

Ruby 2.7.3升级中Dry-Validation/Schema出现未初始化常量错误

问题

将基于TrailBlazer的空模板API从Ruby 2.6.3升级到2.7.3后,遭遇dry系列gem的兼容性问题:

  • 执行bundle exec rspec时触发错误:
    NameError: uninitialized constant Dry::Schema::PredicateRegistry
    
    堆栈信息显示错误来自dry-schema的配置文件。
  • 尝试调用Dry::Validation.load_extensions(:predicates_as_macros)时,出现NoMethodError。

已核对gem版本兼容性,但问题仍未解决,相关Gemfile和Gemfile.lock信息已附上。

解决方案
  • 锁定dry系列gem的兼容版本
    Ruby 2.7.3对dry gem的新版本兼容性要求更严格,需确保dry-schema、dry-validation与TrailBlazer的版本匹配。在Gemfile中指定明确的兼容版本:

    gem 'dry-schema', '~> 1.8'
    gem 'dry-validation', '~> 1.9'
    gem 'trailblazer', '~> 2.10'
    

    运行bundle update dry-schema dry-validation更新依赖,确保各组件版本兼容。

  • 替换废弃的API调用
    Dry::Validation.load_extensions(:predicates_as_macros)在新版dry-validation中已被废弃,无需调用该方法。直接通过dry-schema的DSL定义校验规则即可,示例:

    Dry::Schema.define do
      required(:email).filled(:string, format?: /@/)
    end
    
  • 清理缓存并重装依赖
    执行以下命令清除旧缓存,确保依赖基于Ruby 2.7.3重新安装:

    bundle clean --force
    bundle install
    spring stop # 若使用Spring预加载器
    
  • 验证TrailBlazer与dry gem的适配性
    查看TrailBlazer的CHANGELOG,确认当前使用的TrailBlazer版本支持Ruby 2.7.3及对应的dry gem版本,避免框架与依赖的版本冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:20:39