升级到Rails 6.1.6.1时,我在应用程序中开始出现以下错误:
Psych::DisallowedClass:
Tried to load unspecified class: Symbol
这是由于在ActiveRecord列上使用Hash
序列化程序造成的,该列使用符号作为键或值:
serialize :parameters, Hash
升级到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
个.出于安全原因,默认情况下,这种新方法不处理Symbol
或Time
等数据类型.
announcement建议的解决方法是要么将序列化程序迁移到JSON,要么在序列化中仅使用安全数据类型(字符串、数字).
但是,有两种可配置的快速解决方法:
config.active_record.use_yaml_unsafe_load
不建议这样做,因为它基本上会恢复到旧的行为.
或
config.active_record.yaml_column_permitted_classes = [Symbol]
它允许序列化符号或其他不受支持(或不安全)的数据类型.