0

Rails 2.3.5 から 3.0.19 へのアプリのアップグレードを任されています。これには、Ruby を 1.8.6 から 1.8.7 にアップグレードすることも含まれます。このアップグレードが完了して安定したら、Ruby 1.9 と Rails 3.2 に移行する予定です。

宝石 (からの出力bundle install)、fyi:

Using rake (10.0.3)
Using abstract (1.0.0)
Using activesupport (3.0.19)
Using builder (2.1.2)
Using i18n (0.5.0)
Using activemodel (3.0.19)
Using erubis (2.6.6)
Using rack (1.2.7)
Using rack-mount (0.6.14)
Using rack-test (0.5.7)
Using tzinfo (0.3.35)
Using actionpack (3.0.19)
Using mime-types (1.19)
Using polyglot (0.3.3)
Using treetop (1.4.12)
Using mail (2.2.19)
Using actionmailer (3.0.19)
Using arel (2.0.10)
Using activerecord (3.0.19)
Using activeresource (3.0.19)
Using highline (1.6.15)
Using net-ssh (2.6.2)
Using net-scp (1.0.4)
Using net-sftp (2.0.5)
Using net-ssh-gateway (1.1.0)
Using capistrano (2.13.5)
Using color (1.4.1)
Using dynamic_form (1.1.4)
Using json (1.7.6)
Using mislav-will_paginate (2.3.11)
Using mysql (2.9.0)
Using transaction-simple (1.4.0.2)
Using pdf-writer (1.1.8)
Using bundler (1.2.3)
Using rdoc (3.12)
Using thor (0.14.6)
Using railties (3.0.19)
Using rails (3.0.19)
Using rcov (1.0.0)
Using rvm-capistrano (1.2.7)
Using verification (1.0.1)

unitテストの実行中に、解読または追跡できないエラーが発生しています。エラーは、から継承するクラスに対するテストで発生しますActionMailer。それらは次のようになります。

1) Error:
test_email_to_list(EmailerTest):
ArgumentError: wrong number of arguments (3 for 2)
    test/unit/emailer_test.rb:6:in `test_email_to_list'

参照されている行は、メールを作成しているだけです (create_***ただしcreate_、Rails 3 のプレフィックスはありません)。2 つまたは 3 つの引数を取る近くのどこにも見られる関数呼び出しはありません。

関連するコードを表示する BEGIN UPDATE

問題のある行はemailer_test.rb次のようになります。

mail = Emailer.email_to_list('Subject', 'Contents', 'Code', 'Name')

メソッドは次のActionMailerように呼び出されます。

def email_to_list(eSubject, contents, list_code, name)
  subject    eSubject
  recipients ['email-list-' + list_code.downcase + '@mydomain.org']
  from       'fromaddress@mydomain.org'
  sent_on    Time.now
  bcc        ['admin@mydomain.org']
  content_type "text/html"

  # Old Rails 2 way
  #body       :contents=>contents, :list_code=>list_code.downcase, :name=>name
  # Rails 3 instance variables
  @contents = contents
  @list_code = list_code.downcase
  @name = name
end

関連するコードを表示する END UPDATE

メーラーコードをよりRails 3にした後のBEGIN UPDATE

次のように、より Rails 3 に見えるように Mailer メソッドを更新しました。

def email_to_list(eSubject, contents, list_code, name)
  # Old Rails 2 way
  #body       :contents=>contents, :list_code=>list_code.downcase, :name=>name
  # Rails 3 instance variables
  @contents = contents
  @list_code = list_code.downcase
  @name = name

  mail(:subject=>eSubject,
    :to=>['email-list-' + list_code.downcase + '@mydomain.org'],
    :from=>'fromaddress@mydomain.org',
    :bcc=>['admin@mydomain.org'],
    :date=>Time.now)
end

これにより、エラースタック出力に別のエントリが表示されましたが、問題を解決する方法についてはまだ何もわかりません:

1) Error:
  test_email_to_list(EmailerTest):
  ArgumentError: wrong number of arguments (3 for 2)
    app/models/emailer.rb:18:in `email_to_list'
    test/unit/emailer_test.rb:6:in `test_email_to_list'

(18 行目は:date=>Time.nowで、コメントアウトするとエラー出力の行番号が 17 に変わります)

mailこの問題は、その呼び出しとレンダリングされるビューの 間の Rails 内臓で発生しているようです。--traceそれ以上の情報は得られません。

メーラーコードをRails 3以上にしてEND UPDATE

これらのエラーの原因と解決方法を突き止めるために、2 日間苦労してきました。さらにトラブルシューティングする方法についての洞察をいただければ幸いです。

4

0 に答える 0