我的任务是将应用程序从 Rails 2.3.5 升级到 3.0.19。这还涉及将 Ruby 从 1.8.6 升级到 1.8.7。在此升级完成且稳定后,计划转移到 Ruby 1.9 和 Rails 3.2。
宝石(来自 的输出bundle install
),仅供参考:
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 个参数的函数调用。
开始更新以显示相关代码
中的违规行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 显示相关代码
使 Mailer 代码更多 Rails 3 后开始更新
我更新了 Mailer 方法,使它们看起来更像 Rails 3,如下所示:
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
,注释 out 会将错误输出中的行号更改为 17)
该问题似乎发生在该mail
调用和正在呈现的视图之间的 Rails 胆量中。 --trace
不会产生更多信息。
使 Mailer 代码更多 Rails 3 后结束更新
我已经苦苦挣扎了 2 天,以找出这些错误的根源以及如何解决它们。任何有关如何进一步排除故障的见解将不胜感激。