Ruby 2.7.3升级中Dry-Validation/Schema出现未初始化常量错误
问题
将基于TrailBlazer的空模板API从Ruby 2.6.3升级到2.7.3后,遭遇dry系列gem的兼容性问题:
- 执行
bundle exec rspec时触发错误:
堆栈信息显示错误来自dry-schema的配置文件。NameError: uninitialized constant Dry::Schema::PredicateRegistry - 尝试调用
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
相关产品推荐
相关产品推荐

