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 日間苦労してきました。さらにトラブルシューティングする方法についての洞察をいただければ幸いです。