Obr*_*ios 54 ruby yaml activesupport
升级到 ruby 3.1 时,我在使用时看到以下排序错误消息YAML.load_file some_file_name
Psych::DisallowedClass:
Tried to load unspecified class: Matrix
Run Code Online (Sandbox Code Playgroud)
其他加载语句会导致类似的错误,但引用不同的未指定类,例如 OpenStruct。看来最新版本的 YAML 只加载允许的白名单中的类,因此需要使用 allowed_class 关键字来允许其他类。我努力了
hsh = YAML.load_file some_file_name, permitted_classes: [Matrix, OpenStruct]
Run Code Online (Sandbox Code Playgroud)
但这给出了错误
Psych::DisallowedClass:
Tried to load unspecified class: Symbol
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
spi*_*ann 50
Symbol
在 Ruby 中加载 YAML 时,默认情况下也是不允许的。因此,在读取 YAML 文件时,您还需要在您的情况下添加Symbol
:permitted_classes
hash = YAML.load_file(
some_file_name,
permitted_classes: [Matrix, OpenStruct, Symbol]
)
Run Code Online (Sandbox Code Playgroud)
permitted_classes
请参阅Psych(Ruby 使用的 YAML 解析器)中的默认列表。
或者,在 Ruby on Rails 中使用时,您可以在config/application.rb
Ruby on Rails 应用程序读取 YAML 文件时允许哪些类作为允许的类进行全局配置:
config.active_record.yaml_column_permitted_classes += [Matrix, OpenStruct, Symbol]
Run Code Online (Sandbox Code Playgroud)
请注意,Ruby on Rails 中的内部 YAML 解析Symbol
已经是active_record.yaml_column_permitted_classes
.
Moh*_*ami 41
工作解决方案是将这一行添加到 config/application.rb
config.active_record.yaml_column_permitted_classes = [ActiveSupport::HashWithIndifferentAccess]
Run Code Online (Sandbox Code Playgroud)
您可以对任何类名执行相同的操作,例如
config.active_record.yaml_column_permitted_classes = [Symbol, Hash, Array, ActiveSupport::HashWithIndifferentAccess]
Run Code Online (Sandbox Code Playgroud)
小智 19
在 Rails 6.1 升级上有这个。如果您没有其他选择,也许这个解决方法会给您带来一些时间(application.rb):
config.active_record.use_yaml_unsafe_load = true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23723 次 |
最近记录: |