在Rails 3中使用ActionMailer时出现“错误的参数类型”异常

时间:2013-09-05 19:37:27

标签: ruby-on-rails ruby ruby-on-rails-3

我完全失去了这个。在Rails 3.2.12应用程序中,我正在尝试使用ActionMailer发送电子邮件并获取此异常:

  

TypeError:错误的参数类型Class(预期模块)     来自/Users/trcull/.rvm/gems/ruby-1.9.3-p125@featureviz/gems/actionpack-3.2.12/lib/abstract_controller/helpers.rb:153:in"include'

我把我的邮件剥离到最低限度。它甚至没有发送邮件!这是完整的:

class SupportNewUserMailer < ActionMailer::Base
  def new_user
    puts "hi"
  end
end

说真的,就是这样。然后我像这样从Rails控制台调用它并获得异常:

  

1.9.3p125:001&gt; SupportNewUserMailer.new_user

不知道这里发生了什么。我在同一个应用程序中有另一个邮件程序,它工作正常。

另外,如果它们是相关的,这是我在开发中的配置:

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
  :authentication => :plain,
  :address => "smtp.mailgun.org",
  :port => 587,
  :domain => "redacted",
  :user_name => "redacted",
  :password => "redacted"
}

PS:是的,我尝试将其声明为类方法(即使文档说没有)并得到相同的结果:

class SupportNewUserMailer < ActionMailer::Base
  def self.new_user
    puts "hi"
  end
end

收率:

  

TypeError:错误的参数类型Class(预期模块)       来自/Users/trcull/.rvm/gems/ruby-1.9.3-p125@featureviz/gems/actionpack-3.2.12/lib/abstract_controller/helpers.rb:153:in"include'

PPS:不,找到课程不是问题。如果我将声明更改为此(注意,不再继承自ActionMailer :: Base):

class SupportNewUserMailer 
  def self.new_user
    puts "hi"
  end
end

然后我可以毫无错误地调用它,并按预期将“hi”打印到屏幕上:

1.9.3p125 :001 > SupportNewUserMailer.new_user
hi
 => nil 
1.9.3p125 :002 > 

1 个答案:

答案 0 :(得分:1)

我对自己的问题有部分答案,但我不明白为什么会有效,并希望知道更好的解释。

如果我只是为我的班级使用不同的名字,它可以正常工作。所以,例如,这很好用:

class NewUserMailer < ActionMailer::Base
  def new_user()
    puts "hi"
  end
end

这似乎暗示在类名开头使用“支持”一词是不好的。但我尝试了一个不同的类名,也以“支持”开头,并且工作正常:

class SupportStackOverflowMailer < ActionMailer::Base
  def new_user()
    puts "hi"
  end
end

它特别是它不喜欢的名称“SupportNewUserMailer”。我已经确认我的项目中没有任何一个具有相同名称的类(尽管谁知道某个gem是否存在?)。是否存在某种类元缓存的东西?

编辑:

终于明白了。我在/ lib下声明了一个“SupportNewUserMailerHelper”类。显然Rails试图通过一些爆炸性的自动化精灵将该类作为我的邮件程序类的助手。删除帮助程序类可以解决问题。