Techioz Blog

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 をアップグレードする必要があることを意味します。