【问题标题】:Upgrading to Ruby 3.1 causes Psych::DisallowedClass exception when using YAML.load_file升级到 Ruby 3.1 会导致使用 YAML.load_file 时出现 Psych::DisallowedClass 异常
【发布时间】:2022-07-14 16:06:25
【问题描述】:

升级到 ruby​​ 3.1 时,我在使用 YAML.load_file some_file_name 时看到以下排序错误消息

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

其他加载语句会导致类似的错误,但引用了不同的未指定分类,例如开放结构。似乎最新版本的 YAML 仅从允许的白名单中加载类,因此需要使用 allowed_class 关键字来允许其他类。我试过了

hsh = YAML.load_file some_file_name, permitted_classes: [Matrix, OpenStruct]

但这给出了错误

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

我该如何解决这个问题。

【问题讨论】:

    标签: ruby yaml


    【解决方案1】:

    Symbol 默认也是不允许的。因此只需将Symbol 也添加到permitted_classes

    hash = YAML.load_file(
      some_file_name, 
      permitted_classes: [Matrix, OpenStruct, Symbol]
    )
    

    查看默认permitted_classes列表。

    【讨论】:

      【解决方案2】:

      可行的解决方案是将此行添加到 config/application.rb

      config.active_record.yaml_column_permitted_classes = [ActiveSupport::HashWithIndifferentAccess]
      

      你可以对任何类名做同样的事情,比如

      config.active_record.yaml_column_permitted_classes = [Symbol, Hash, Array, ActiveSupport::HashWithIndifferentAccess]
      

      【讨论】:

        猜你喜欢
        • 2022-07-14
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        相关资源
        最近更新 更多