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

在Sinatra中使用PaperTrail的reify方法时遭遇Psych::DisallowedClass异常

解决PaperTrail reify时的Psych::DisallowedClass (Time类)错误

方案1:全局配置PaperTrail允许Time类

在Sinatra项目的配置代码中(比如app.rb的configure块,或者单独的初始化文件),添加PaperTrail序列化器的白名单配置:

# 初始化PaperTrail并指定序列化器
PaperTrail.config do |config|
  config.serializer = PaperTrail::Serializers::YAML
end

# 给YAML序列化器添加允许的Time类
PaperTrail::Serializers::YAML.add_whitelisted_classes(Time)

该配置会全局生效,所有reify操作都能正常处理Time类型的字段。

方案2:调用reify时临时指定允许的类

如果不想全局修改配置,可在调用reify时通过serializer_options参数传入白名单,仅对当前操作生效:

version = item.versions[index]
# 仅当前reify操作允许Time类反序列化
reified_model = version.reify(serializer_options: { permitted_classes: [Time] })

方案3:全局放宽Psych配置(不推荐)

若上述方案无效,可临时修改Psych的全局安全设置,但此方法会降低整个应用的YAML解析安全性,不建议用于生产环境:

# 全局允许Time类的反序列化
Psych::Whitelist.add(Time)

错误原因

Ruby 3.0及以上版本中,默认的YAML解析库Psych启用了严格安全模式,禁止反序列化未明确加入白名单的类。而PaperTrail 15.1.0的默认YAML序列化器未将Time类纳入白名单,因此还原历史版本时触发了安全限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:33