1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Psych::BadAlias Unknown alias: defaultのエラーの原因とその対応

Posted at

前提

  • Ruby:3.0.0
  • rails:6.1.3.1

経緯

Rubyを3.0.0から3.1に上げたところ、railsアプリ立ち上げ時に以下のようなエラーが発生した。

/usr/local/bundle/gems/psych-3.3.0/lib/psych/visitors/to_ruby.rb:420:in `resolve_class': Unknown alias: default (Psych::BadAlias)

原因

Ruby3.1から新たにPsychのバージョンが4.0に上がり、Psych.loadsafe_load を利用するようになった。

Psych 4.0 では Psych.load が safe_load を利用するように変更されました。この挙動が影響ある場合は、従来の挙動である unsafe_load を利用する Psych 3.3.2 を移行パスとして利用できます。[Bug #17866]

ref: https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0-released/

この変更は以下のような背景があるらしい。

loadメソッドが正しく使われないと脆弱になる可能性があるので、デフォルトでsafe_loadを実行するように

ref: https://techracho.bpsinc.jp/hachi8833/2021_05_18/107813#3-3

対応

Rails6.1.4にて、このPsych4.0への互換性の対応が行われたので、railsのバージョンを6.1.3.1から6.1.4にバージョンアップした。

Starting in Psych 4.0.0 YAML.load behaves like YAML.safe_load. To preserve compatibility Rails.application.config_for now uses YAML.unsafe_load if available.

ref: https://github.com/rails/rails/releases/tag/v6.1.4

対応としては、sale_load がデフォルトになったために、制約が厳しくなるので、可能な箇所では unsafe_load を使うようになったということ。

あるいはこの記事(visit_Psych_Nodes_Alias': Unknown alias: default (Psych::BadAlias) 解決方法)で言われているように、Psychのバージョンを下げることでも対応できるらしい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?