geb*_*011 10 ruby-on-rails actionmailer delayed-job argument-error
我正在尝试延迟在注册我的应用程序时发送给用户的通知电子邮件.电子邮件是使用ActionMailer我打电话发送的InitMailer.我试图推迟工作的方式是使用collectiveidea的delayed_job https://github.com/collectiveidea/delayed_job.为此,您可以看到我handle_asynchronously在定义方法后指定initial_email:
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
Run Code Online (Sandbox Code Playgroud)
但是,我在日志文件中遇到参数错误"delayed_job.log":
Class#initial_email failed with ArgumentError: wrong number of arguments (1 for 0) - 5
failed attempts
Run Code Online (Sandbox Code Playgroud)
为了您的信息,电子邮件使用以下行在控制器中发送:
@user = InitUser.new(params[:init_user])
InitMailer.delay.initial_email(@user)
Run Code Online (Sandbox Code Playgroud)
此外,当我设置我的代码没有延迟时,电子邮件发送没有问题(除了它减慢我的应用程序等待gmail服务器的事实)
这里导致错误的地方在哪里?如何才能正确发送延迟邮件?
jay*_*jay 10
由于Rails3实现邮件程序的方式,delayed_jobs有一些不寻常的解决方法.例如,你已经看到要延迟邮件,你写
ExampleMailer.delay.example(user)
Run Code Online (Sandbox Code Playgroud)
虽然通常您必须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
#No handle_asynchronously needed here
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4586 次 |
| 最近记录: |