升级到Rails 6.1.6.1时,我在应用程序中开始出现以下错误:

Psych::DisallowedClass:
        Tried to load unspecified class: Symbol

这是由于在ActiveRecord列上使用Hash序列化程序造成的,该列使用符号作为键或值:

serialize :parameters, Hash

推荐答案

该错误是由于Rails中的以下安全更新引起的:

Hash序列化程序显然加载了YAML.unsafe_load个数据,现在改为YAML.safe_load个.出于安全原因,默认情况下,这种新方法不处理SymbolTime等数据类型.

announcement建议的解决方法是要么将序列化程序迁移到JSON,要么在序列化中仅使用安全数据类型(字符串、数字).

但是,有两种可配置的快速解决方法:

config.active_record.use_yaml_unsafe_load

不建议这样做,因为它基本上会恢复到旧的行为.

config.active_record.yaml_column_permitted_classes = [Symbol]

它允许序列化符号或其他不受支持(或不安全)的数据类型.

Ruby-on-rails相关问答推荐

确定当前太平洋时区是PST还是PDT

Heroku、Selenium、Chome和Chromedriver的复杂问题(抱歉,无法简单描述,请阅读详细信息)

为什么 Rails 执行器不能识别内核的改进?

在 Ruby on Rails html.erb 文件中循环

attr_accessible(*attributes) 和 attr_protected(*attributes) 有什么区别?

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

Rails cron 与时俱进,设置环境

Ruby on Rails 取消首字母大写

Rails 模型:您将如何创建一组预定义的属性?

水豚 click_link 与 :href 匹配

在 Rails 4 中检测用户代理 - 读取 HTTP 标头

没有要加载的文件 - readline

不带参数的 request.fullpath

Rails:仅当值存在时如何验证格式?

在具有唯一约束的关联中使用 Rails 中的 factory_girl.得到重复的错误

验证一个对象是否有一个或多个关联对象

ActiveRecord 查找现有表索引

Rails 控制台中手动更新属性值的验证问题

您如何查看 ruby​​ 中的调用堆栈示例?

rails路由中资源和资源之间的区别?