amazon

[Ruby]Ruby 3.1 にバージョンアップ時の Unknown alias: default (Psych::BadAlias) 対応

はじめに

[Ruby]Ruby 2.7 -> 3.1.2 に上げたときのエラーの修正方法」の続きの記事です。

Ruby 2.7 -> 3.1 に上げた際にひたすらはまったので忘備録です。

事象

以下のエラーが発生しました。

/usr/local/lib/ruby/3.1.0/psych/visitors/to_ruby.rb:430:in `visit_Psych_Nodes_Alias': Unknown alias: default (Psych::BadAlias)

いろいろ調べると ライブラリの v3 と v4 で互換性がなくなった[1][2]ことが原因のようです。脆弱性の原因となりうるのでエイリアスはデフォルトで不可となったことが原因です。暫定対応[1]でもよいのですが、どのみち対応しないと後々辛くなるので v4 の様式に合わせて修正します

対応

一般的に以下を修正が必要です。

config/database.yml

大抵は develop と test 環境で 設定を共有していることが多いので以下の様に記載していることが多いです。database 名のみ差異があり、その他は同じ場合は以下のように記載していることが多いと思います。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  charset: utf8mb4
  collation: utf8mb4_general_ci
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: <%= ENV.fetch("DB_HOST", "127.0.0.1")  %>
  username: root
  password: <%= ENV.fetch("DB_PASS") %>
  database: <%= ENV.fetch("DB_NAME") %>

development:
  <<: *default
  database: app_develop

test:
  <<: *default
  database: app_test

エイリアスがデフォルト不可となったので以下のように修正します。

development:
  adapter: mysql2
  encoding: utf8mb4
  charset: utf8mb4
  collation: utf8mb4_general_ci
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: <%= ENV.fetch("DB_HOST", "127.0.0.1")  %>
  username: root
  password: <%= ENV.fetch("DB_PASS") %>
  database: app_develop

test:
 adapter: mysql2
  encoding: utf8mb4
  charset: utf8mb4
  collation: utf8mb4_general_ci
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: <%= ENV.fetch("DB_HOST", "127.0.0.1")  %>
  username: root
  password: <%= ENV.fetch("DB_PASS") %>
  database: app_test

大抵の場合、この修正で問題なくなります。しかし、同じエラーが発生して消えませんでした。
しかし、 grep してもヒットしないケースがあります。

その場合、 config/credentials.yml.enc を疑ってください。
このファイルは grep でヒットしない&基本的に触れないので意識が及ばないことが多いです。

私のプロジェクトでは上記ファイルを修正すれば対応ができました。

おわりに

config/credentials.yml.enc って普段触れないので意識がいかないですよね。

参考

[1] Psych gemにbreaking change, https://techracho.bpsinc.jp/hachi8833/2021_05_18/107813#3-3
[2] psych::badalias: unknown alias: defaultで Railsコマンドが使えないを解決, https://qiita.com/kandalog/items/8fd20f79ecf73034795a

コメント

タイトルとURLをコピーしました