ActionMailer - NoMethodError:MyMailer的未定义方法X:Class

时间:2016-02-08 12:53:22

标签: ruby-on-rails email actionmailer sidekiq nomethoderror

问题:为什么方法未定义,如果它就在那里?

详细信息:

我有一个非常简单的邮件类:

class ProductMailer < ApplicationMailer
  def sample_email
    mail(to: "me@example.com") # I hardcode my own email just to test
  end
end

来自ProductsController的一个非常简单的调用:

def sample_email
  ProductMailer.sample_email().deliver_later
  redirect_to @product, notice: 'Email was queued.'
end

电子邮件无法发送。我正在使用Sidekiq来处理后台的电子邮件。 Sidekiq Web UI在 Tries 页面中显示失败的作业,我可以看到它失败的原因:

NoMethodError: undefined method `sample_email' for ProductMailer:Class

我尝试重命名该方法并使用rails server重新启动服务器,但这些都不会删除错误。我没有使用任何名称空间。

问题:为什么方法未定义,如果它就在那里?

注意:我发现如果我将它命名为notify,则发现方法 ,但也许这是因为我正在覆盖ActionMailer中的某些方法基类,我不知道。

2 个答案:

答案 0 :(得分:2)

答案:重启Sidekiq

我在启动Sidekiq之前创建了邮件程序类,但是当Sidekiq已经运行时我重命名了sample_email方法,因此Sidekiq似乎无法即时识别新方法。

我重命名了这个方法,因为我已经习惯了开发环境,在那里你几乎可以随时改变任何东西......

答案 1 :(得分:-1)

这是因为您已经定义了一个实例方法,然后尝试在类上调用它。将其更改为

def self.sample_email
    ....