rails3中使用delayed_job异步发送邮件的方法

railscasts有个视频,使用delayed_job去发送邮件(http://railscasts.com/episodes/171-delayed-job)

但是呢,rails3的发送邮件的api发生了些许变化。(详情请看:http://lindsaar.net/2010/1/26/new-actionmailer-api-in-rails-3)
发送的方法上也要做些许的修改。这里以我的代码作为示例,做个示范。
这里的UserMailer大概代码:
class UserMailer < ActionMailer::Base
default :from => "admin@example.com"

def registration_confirmation(user)
@user = user
mail(:to => "#{user.username} <#{user.email}>", :subject => "注册确认")
end
end

这个是rails3的ActionMailer,很赞

有了上面的代码,Controller中直接调用
UserMailer.registration_confirmation(@user).deliver
就可以发送邮件了
  def create
@user = User.new(params[:user])
if @user.save
UserMailer.registration_confirmation(@user).deliver
flash[:notice] = "谢谢您的注册,一封注册确认邮件即将发往邮箱#{@user.email},请注意查收!"
redirect_to '/login'
else
render :action => 'new'
end
end

但是,现在的代码是直接进行发送的,这使得用户在操作的时候,会卡一下,如果放到后台去发送就不会有这个问题。

在rails的lib目录底下的mailing_job.rb文件内容,做些许的变化
class MailingJob < Struct.new(:notifier_method,:user_id)
def perform
user = User.find(user_id)
UserMailer.send(notifier_method, user).deliver
end
end


到这里就基本上搞定了,把UserController里的直接发送的代码换成:
Delayed::Job.enqueue MailingJob.new(:registration_confirmation, @user.id)


delayed_job记得上最新版,gemfile里直接写gem "delayed_job", "2.1.0.pre"就可以了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值