使用 YAML.load_file 时升级到 Ruby 3.1 会导致 Psych::DisallowedClass 异常
Upgrading to Ruby 3.1 causes Psych::DisallowedClass exception when using YAML.load_file
升级到 ruby 3.1 时,我在使用 YAML.load_file some_file_name
时看到以下排序错误消息
Psych::DisallowedClass:
Tried to load unspecified class: Matrix
其他加载语句会导致类似的错误,但会引用不同的未指定类,例如开放结构。最新版本的 YAML 似乎只从允许的白名单中加载 类,因此有必要使用 permitted_class 关键字来允许其他 类。我试过了
hsh = YAML.load_file some_file_name, permitted_classes: [Matrix, OpenStruct]
但这给出了错误
Psych::DisallowedClass:
Tried to load unspecified class: Symbol
我该如何解决这个问题。
默认情况下也不允许 Symbol
。因此,也只需将 Symbol
添加到 permitted_classes
即可:
hash = YAML.load_file(
some_file_name,
permitted_classes: [Matrix, OpenStruct, Symbol]
)
查看默认列表 permitted_classes
。
升级到 ruby 3.1 时,我在使用 YAML.load_file some_file_name
Psych::DisallowedClass:
Tried to load unspecified class: Matrix
其他加载语句会导致类似的错误,但会引用不同的未指定类,例如开放结构。最新版本的 YAML 似乎只从允许的白名单中加载 类,因此有必要使用 permitted_class 关键字来允许其他 类。我试过了
hsh = YAML.load_file some_file_name, permitted_classes: [Matrix, OpenStruct]
但这给出了错误
Psych::DisallowedClass:
Tried to load unspecified class: Symbol
我该如何解决这个问题。
Symbol
。因此,也只需将 Symbol
添加到 permitted_classes
即可:
hash = YAML.load_file(
some_file_name,
permitted_classes: [Matrix, OpenStruct, Symbol]
)
查看默认列表 permitted_classes
。