`
t0uch
  • 浏览: 57896 次
  • 性别: 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_celluloid

    安装将 delay_job_celluloid 添加到您的 gem 文件中 gem 'delayed_job_celluloid'运行捆绑安装 bundle install delayed_job_celluloid要将启动脚本添加到您的脚本目录,请运行生成器 rails generate delayed_job_...

    delayed_job_mongoid:延迟工作的Mongoid后端

    延迟的工作Mongoid后端 要求 Mongoid 5或更高版本。 对于Mongoid 3和4,请使用此gem的2.x版本。 安装 将宝石添加到您的Gemfile中: gem 'delayed_job_mongoid'... rails generate delayed_job 就是这样。 正常使用 。

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

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

    delayed_job_active_record:用于DelayedJob 3.0+的ActiveRecord后端集成

    rails g delayed_job:active_recordrake db:migrate锁定作业时出现问题您可以尝试使用旧版锁定代码。 通常速度较慢,但​​对某些人来说效果更好。 Delayed::Backend::ActiveRecord.configuration.reserve_sql_...

    Rails_3_Cheat_Sheets.pdf

    Rails_3_Cheat_Sheets.pdf

    RestFul_Rails_Dev_pdf_v_0.1.zip

    本资料“RestFul_Rails_Dev_pdf_v_0.1.zip”包含了《RESTful Rails Development》的翻译版,将深入探讨如何在Rails中实现RESTful的设计模式。 首先,RESTful设计的核心概念是资源(Resources)。在Rails中,资源...

    Rails_Recipes_with_Source_Code

    14. **邮件发送(Action Mailer)**:Rails内置了Action Mailer用于发送电子邮件,书中可能会涉及邮件模板、配置和测试。 通过阅读《Rails Recipes with Source Code》,开发者可以深入理解Rails的各个层面,并学会...

    rails_admin_content_builder:使用rails_admin创建内容的简单方法

    使用创建内容的简单方法。 预习 示范 要求 依存关系 MiniMagick 支持的ORM ActiveRecord 支持的资产插件 CarrierWave 安装 使用rails &lt;5和TurboLink &lt;5进行测试 将此行添加到您的应用程序的Gemfile中: ...

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    IkaGame示例。使用 Rails5 ActionCable_ruby_代码_下载

    3. **连接逻辑**:在`app/assets/javascripts/cable.js`中,Rails自动生成的ActionCable初始化代码需要根据实际需求进行定制,以建立WebSocket连接并订阅所需的通道。 4. **前端交互**:使用JavaScript(通常为...

    用于过滤英文脏话的 Rails 插件 gem_Ruby_代码_相关文件_下载

    在Rails应用中使用`profanity_filter`的步骤大致如下: 1. **安装 gem**:首先,在你的Rails项目的`Gemfile`中添加`gem 'profanity_filter'`,然后运行`bundle install`命令来安装。 2. **配置**:在你的Rails应用...

    Complex Rails system_Rails_优化_

    3. **数据缓存**:使用低级缓存`Rails.cache`存储查询结果,避免重复计算。 三、代码优化 1. **避免在循环中进行数据库查询**:将查询移到循环之外,减少不必要的数据库交互。 2. **减少视图复杂性**:保持视图...

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版.zip

    以上只是Awesome Rails Gem列表中的一部分,实际列表还包含了更多用于数据库迁移、日志记录、邮件发送、国际化、安全、缓存、版本控制等各个方面的Gem。通过这个列表,开发者可以快速找到适合自己项目的Gem,极大地...

    delay_job_web:像Web界面一样延迟工作

    编写该gem的目的是使用activerecord与rails 3和4应用程序一起使用。 一些功能: 轻松查看排队,工作,挂起和失败的作业。 将任何单个作业或所有待处理的作业放入队列,以立即运行。 删除失败的作业或轻松删除所有...

    rails_admin_history_rollback:使用paper_trail的rails_admin的历史记录回滚

    安装要启用rails_admin_history_rollback ,请将以下内容添加到您的Gemfile确保将其添加到rails_admin之后: gem 'rails_admin'gem 'rails_admin_history_rollback' 不用说,此插件还需要paper_trail gem。...

    rails_admin_image_manager:RailsAdmin和CKEditor的图像管理器

    $ rails generate rails_admin_image_manager:install 将上传文件路径添加到您的.gitignore文件中 /public/rails_admin_image_manager 运行迁移 $ rails db:migrate SCOPE=rails_admin_image_manager 安装图像管理...

    rails_model_test_hello_world

    自述文件版本和设置$ ruby -vruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]$ rails -vRails 5.2.3使用我创建的特殊模板来加快开发过程。 # ~/rtfb_template.rbgroup :development , :test do gem '...

    delay_job_progress:扩展为延迟::工作

    建立添加到Gemfile:gem'delayed_job_progress gem 'delayed_job_progress' bundle install rails g delayed_job:progress rake db:migrate配置和用法考虑一下: class User &lt; ActiveRecord xss=removed&gt; :record , ...

Global site tag (gtag.js) - Google Analytics