微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 如何使用delayed_job来使Rails 3.0 ActionMailer异步运行?遇到论据错误

我正在尝试延迟通知电子邮件,以便在注册到我的应用程序时发送给用户.电子邮件是使用我称之为InitMailer的ActionMailer发送的.我试图延迟工作的方式是使用collectidea的delayed_job https://github.com/collectiveidea/delayed_job.为此,您可以看到我在定义方法initial_email之后指定handle_isynchronously:
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服务器)

在哪里造成错误?如何让延迟邮件正确发送?

解决方法

由于Rails3实现邮件程序的方式,对于delayed_jobs有一些不寻常的解决方法.例如,你已经看到要延迟邮寄,你写
ExampleMailer.delay.example(user)

虽然通常,您必须在方法定义之后写入handle_synchronously,在邮件程序的情况下,此声明(由于某种原因)会阻止该延迟作业工作.

所以在这代码中,完全放弃声明:

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

原文地址:https://www.jb51.cc/ruby/266774.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐