0

我的任务是将应用程序从 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 天,以找出这些错误的根源以及如何解决它们。任何有关如何进一步排除故障的见解将不胜感激。

4

0 回答 0