加载任何yaml文件时出现未知别名

Lui*_* E. 7 ruby yaml ruby-on-rails ruby-on-rails-4

当我尝试在我的应用程序中加载任何yaml文件时,我收到此错误:

Psych::BadAlias: Unknown alias: default
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:385:in `visit_Psych_Nodes_Alias'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:15:in `visit'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:5:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:31:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:321:in `block in revive_hash'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:319:in `each'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:319:in `each_slice'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:319:in `revive_hash'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:161:in `visit_Psych_Nodes_Mapping'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:15:in `visit'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:5:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:31:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:321:in `block in revive_hash'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:319:in `each'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:319:in `each_slice'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:319:in `revive_hash'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:161:in `visit_Psych_Nodes_Mapping'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:15:in `visit'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:5:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:31:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:295:in `visit_Psych_Nodes_Document'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:15:in `visit'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/visitor.rb:5:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych/visitors/to_ruby.rb:31:in `accept'
  /Users/luizkowalski/.rbenv/versions/2.2.3/lib/ruby/2.2.0/psych.rb:295:in `safe_load'
  /Users/luizkowalski/rails_dev/api/app/services/country_products_limitations_policy.rb:3:in `<class:CountryProductsLimitationsPolicy>'
Run Code Online (Sandbox Code Playgroud)

我正在使用Ruby 2.2.3将Rails应用程序从4.1更新到4.2.8.

yaml文件是这个:

default: &default
  no_yearly_plans:
    - TH
    - SD
    - PK
    - SA
    - BH
    - SY
    - IQ
    - QA
    - YE
    - BY
    - OM
    - JO
    - CI
    - KW
    - AE

production:
  <<: *default

staging:
  <<: *default

development:
  <<: *default

test:
  <<: *default
Run Code Online (Sandbox Code Playgroud)

我的第一个假设是这个文件是错误的,但是所有的短信都说它很好,所以我不知道它会是什么

aro*_*ero 20

如果您使用safe_load,则需要显式启用别名:

YAML.safe_load path_to_yaml, [], [], true
Run Code Online (Sandbox Code Playgroud)

  • `YAML.safe_load yaml, aliases: true` 也可以解决问题 https://ruby-doc.org/stdlib-2.6.1/libdoc/psych/rdoc/Psych.html#method-c-safe_load (5认同)