我正在尝试延迟发送一封通知电子邮件给用户,当他们注册我的应用程序时。这些电子邮件使用我调用的InitMailer
的ActionMailer
发送。 我尝试延迟作业的方法是使用collectiveidea的delayed_job
https://github.com/collectiveidea/delayed_job。为此,您可以看到我在定义initial_email
方法后指定了handle_asynchronously
:
class InitMailer < ActionMailer::Base
default :from => "info@blahblahblah.com"
def initial_email(user)
@user = user
@url = "http://www.blahblahblah.com"
mail(:to => user.email,
:subject => "Welcome to my website!"
)
end
handle_asynchronously :initial_email
end
然而,我在我的日志文件"delayed_job.log"
中遇到了一个参数错误:
Class#initial_email failed with ArgumentError: wrong number of arguments (1 for 0) - 5
failed attempts
提供信息,电子邮件是在控制器中使用以下代码发送的:
@user = InitUser.new(params[:init_user])
InitMailer.delay.initial_email(@user)
此外,当我没有设置延迟时,邮件可以正常发送(除了等待gmail服务器会导致我的应用程序变慢的事实)。请问是什么原因导致了错误?我该如何使延迟邮件能够正确发送?