PFメモ日記(3) railsコマンドが実行できないエラー
deviseを使おうとgemをインストールし、bundle exec rails g devise:install
した際に下記のエラーが発生。
Calling
DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call
DidYouMean.correct_error(error_name, spell_checker)' instead. You don't have net-smtp installed in your application. Please add it to your Gemfile and run bundle install /Users/ユーザー名/.rbenv/versions/3.1.2/lib/ruby/3.1.0/psych/visitors/to_ruby.rb:430:in `visit_Psych_Nodes_Alias': Unknown alias: default (Psych::BadAlias)
- deviseに起因するエラーではない
- 序盤に書いてある
DidYouMean::SPELL_CHECKRS
はruby3.1環境で出てくる警告文らしい - Rubyの3.3バージョンでは
DidYouMean::SPELL_CHECKRS
の使用が非推奨になり、削除されることの注意書きであり、Ruby3.3以前を使用している分には特に支障はない
↑thor
というタスク実行のためのコマンドを作成するgemに起因する注意書きらしく、updateすればなくなる旨が記載されていた。
後半のエラーについて
You don't have net-smtp installed in your application. Please add it to your Gemfile and run bundle install /Users/ユーザー名/.rbenv/versions/3.1.2/lib/ruby/3.1.0/psych/visitors/to_ruby.rb:430:in `visit_Psych_Nodes_Alias': Unknown alias: default (Psych::BadAlias)
net-smtp
がインストールされていないのでインストールする旨書かれている
→これはメール機能に関するgemらしく、今は使用する予定がないので飛ばした。必要になったらインストールしてみる。色々調べてみるとrailsコマンドが使えないのは、
visit_Psych_Nodes_Alias': Unknown alias: default (Psych::BadAlias)
の部分に起因する何からしい- psychというYAML解釈用のgemがあり、4系と3系で解釈法が変わったことによるエラーらしい
→ 3系でないとdatabase.ymlの解釈に失敗している
gemfile.lockを確認すると4系がインストールされていたのでgemfileにgem 'psych', ''~> 3.1
を記載してbundle installし直すと解決した
他に試したこと
rails6.1.4以降で解決されているとのことで、gemfileのrailsバージョンを書き換え、bundle updateしてみたが変化なし
Psychとは
Ruby本体のdefault gemでYAMLライブラリのバックエンド実装になります。YAML自体がPsychに依存する形で実装されています。 Ruby の YAML.load が非互換になる(かもしれない) - Secret Garden(Instrumental)
参考にしたサイト
thor
【Ruby】thorの仕組みを調べてみた DSL編 - サーバーワークスエンジニアブログ
psychのエラーに関して
エラーUnknown alias: defaultが出て、railsサーバを起動できない
psych::badalias: unknown alias: defaultで Railsコマンドが使えないを解決 - Qiita