问题:为什么方法未定义,如果它就在那里?
详细信息:
我有一个非常简单的邮件类:
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中的某些方法基类,我不知道。
答案 0 :(得分:2)
答案:重启Sidekiq
我在启动Sidekiq之前创建了邮件程序类,但是当Sidekiq已经运行时我重命名了sample_email
方法,因此Sidekiq似乎无法即时识别新方法。
我重命名了这个方法,因为我已经习惯了开发环境,在那里你几乎可以随时改变任何东西......
答案 1 :(得分:-1)
这是因为您已经定义了一个实例方法,然后尝试在类上调用它。将其更改为
def self.sample_email
....