Gem メールのdelivery_now メソッドで引数の数が間違っているというエラーが発生する
概要
Rails プロジェクトの Ruby バージョンのアップグレードで少し行き詰まっています。プロジェクトは Rails 6.1.7 で実行されており、Ruby バージョンを 3.2.2 にアップグレードしました。ただし、私のテストでは、Gem メール (バージョン 2.8.1) のdelivery_now メソッドに問題があることがわかりました。
次の呼び出しでは、次のエラーが発生します。
Call: TestMailer.test_mail(one: foo, two: bar).deliver_now
Error: wrong number of arguments (given 1, expected 0; required keywords: one, two) (ArgumentError)
対応するメソッド定義は次のようになります。
def test_mail(one:, two:)
attach_files([one.last.pdf_path.to_s]) if two
send_mail(one: one)
end
私は、問題はバージョン 2.8.1 の Gem メールにあるのではないかと強く疑っています。 Gemfile のバージョンを gem ‘mail’、‘2.7.1’ に修正し、Ruby のバージョンを “のみ” 3.0.4 に上げると、すべてが機能します。
解決策
メールジェムではないのが残念です。 Rails 6.1.7 は Ruby 3.2 と互換性がありません。Ruby 3.1 で導入されたキーワードの変更が正しく動作するには、Rails 7.0.1 (7.0.0 でもありません) バージョンが必要です。残念ながら、これは最初に Rails をアップグレードする必要があることを意味します。