`
t0uch
  • 浏览: 59563 次
  • 性别: Icon_minigender_1
  • 来自: 柳州
社区版块
存档分类
最新评论

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

    博客分类:
  • RoR
阅读更多
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"就可以了
分享到:
评论

相关推荐

    delayed_job_current:官方 DelayedJob 存储库的分支,带有 Shopify 的改进

    Delayed::Job(或 DJ)封装了在后台异步执行较长任务的常见模式。 它是直接从 Shopify 中提取的,其中工作表负责许多核心任务。 这些任务包括: 发送大量时事通讯 图像大小调整 http下载 更新智能收藏 在产品更改...

    Rails3 使用rake启动后台任务

    以下是一些关于如何在 Rails3 中使用 rake 启动后台任务的知识点: 1. **Rakefile**: 每个 Rails 项目都有一个 Rakefile 文件,这是 Rake 执行任务的入口点。在这个文件中,你可以定义自定义的任务。 2. **Task ...

    rails-4.2.0-gems

    3. 克隆或下载Rails 4.2.0项目的源代码,或者创建一个新的Rails项目,使用`rails new my_app -d sqlite3`命令,其中`my_app`是你的应用名,`-d sqlite3`指定使用SQLite数据库。 4. 进入项目目录,运行`bundle ...

    详解Ruby on Rails中的mailer相关使用

    可以利用`delayed_job`这样的背景任务库来异步发送邮件,以提高用户体验。 综上所述,理解并遵循这些最佳实践能够帮助你在Ruby on Rails中构建高效且健壮的Mailer系统,同时确保邮件的可靠性和用户体验。

    platform:DPLA平台

    Content-QA子应用程序使用和异步优先级队列系统。 安装时,运行以下命令以生成延迟的作业并在数据库中创建表: rails generate delayed_job rails generate delayed_job:active_record rake db:migrate 当启动...

    qe:多个后台作业库(如 Resque、Sidekiq 和 DelayedJob)的简单界面

    在这个每隔一段时间发布一个新的异步作业处理库的狂野世界中,Qe 试图保持一个与最著名的库一起工作的统一接口: /后 要设置适配器,只需根据您的适配器加载文件: require "qe/resque" require "qe/qu" require ...

    跟踪值得注意的请求和后台作业_Ruby_下载.zip

    这些gem允许你在异步执行任务,如发送电子邮件、处理图片或执行耗时的操作,而不阻塞主线程,提高应用响应速度。为了跟踪这些后台作业,每个库都有自己的监控工具和日志机制。例如,Sidekiq提供了一个Web界面,展示...

    mindapp_blank:新的 Mindapp Web 应用程序的空白模板

    1. **Active Job**:这是一个抽象层,用于处理异步任务,使得开发者可以方便地选择后台队列服务,如Resque、Sidekiq或Delayed Job。 2. **Action Cable**:首次引入,是Rails 5的一部分,但4.2.0中已开始预览。它为...

Global site tag (gtag.js) - Google Analytics