`

Rails 异步发送邮件和测试

阅读更多
异步执行在当前(这个东西在rails的领域,变化的可能很大,总是有更好用的插件,更酷的想法冒出来)

最流行的应该就是delayed_job,这个的资料比较多,例如,railscast就有介绍。所以,老猪这里就简单说说用法。delayed_job异步思路还是,在需要调用的地方加delay,例外启动一个deamon,处理任务。
其中,railscast的介绍已经被JE某XD翻译了,用到的参考http://enn.iteye.com/blog/632960
原本地址:
http://asciicasts.com/episodes/171-delayed-job

并该方案当前的Rails 3解决方案JE也有

参考如下:

http://t0uch.iteye.com/blog/673336

安装:
script/plugin install git://github.com/collectiveidea/delayed_job.git


生成:
  script/generate delayed_job


rake db:migrate
#后台处理
rake jobs:work


生成表如下:
  create_table :delayed_jobs, :force => true do |table|
    table.integer  :priority, :default => 0      # Allows some jobs to jump to the front of the queue
    table.integer  :attempts, :default => 0      # Provides for retries, but still fail eventually.
    table.text     :handler                      # YAML-encoded string of the object that will do work
    table.string   :last_error                   # reason for last failure (See Note below)
    table.datetime :run_at                       # When to run. Could be Time.now for immediately, or sometime in the future.
    table.datetime :locked_at                    # Set when a client is working on this object
    table.datetime :failed_at                    # Set when all retries have failed (actually, by default, the record is deleted instead)
    table.string   :locked_by                    # Who is working on this object (if locked)
    table.timestamps
  end


另一个知名的解决方案是ar_mailer


ar_mailer的时间要长,用起来和delayed job的解决方案差不多,异步的思路把任务存到数据库,然后,后台任务轮询触发。

和Delayed Job相同,也有一篇介绍Rails 3使用的在letrails上
http://www.letrails.cn/archives/ar_mailer-rails-3-plugi
老猪自己当前的项目用的ar_mailer

大致使用如下:

$ sudo gem install adzap-ar_mailer


  config.gem "adzap-ar_mailer"

  ./script/generate ar_mailer


  #config/environments/production.rb 

  config.action_mailer.delivery_method = :activerecord


启动后台

 $ ar_sendmail



最后,测试异步的发送邮件

也是使用一个插件,保证在测试环境邮件并不真正发送,就可以验证了
 #$ ./script/plugin install git://github.com/ngty/action_mailer_cache_delivery.git


#RAILS_ROOT/config/environments/test.rb, 

  config.action_mailer.delivery_method = :cache
1
0
分享到:
评论

相关推荐

    rails-4.2.0-gems

    此外,Rails 4.2.0引入了`Active Job`,这是一个抽象层,用于处理异步任务和后台作业。它与各种后台作业队列库如Resque、Sidekiq和Delayed Job兼容,极大地提高了应用的响应速度和用户体验。 关于Ruby 4.2.0,最大...

    ruby on rails 101

    - **测试**:介绍如何为Ruby on Rails项目编写单元测试和集成测试。 - **AJAX**:学习如何在Ruby on Rails应用中集成异步JavaScript和XML技术。 - **部署、安全与性能**:讲解如何部署Ruby on Rails应用、实施安全...

    Messaging with Rails

    综上所述,《Messaging with Rails》这篇文章会涵盖Rails框架下构建消息传递系统的主要方面,包括模型设计、关联建立、控制器与视图的实现、通知功能、异步处理以及测试和安全措施。通过学习这些内容,开发者可以...

    ruby on rails 常用插件下载

    描述中提到的测试场景,就是通过这个插件一次性尝试发送一百封邮件,这可能是为了测试邮件服务的稳定性和性能,同时避免阻塞主线程,影响用户界面的响应。 在实际操作中,使用这样的插件通常涉及以下步骤: 1. ...

    Rails_Recipes_with_Source_Code

    5. **测试(Testing)**:Rails强调TDD(Test Driven Development)和BDD(Behavior Driven Development),书中可能介绍Rspec、Capybara等测试工具的使用,包括单元测试、集成测试和功能测试。 6. **数据库迁移...

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

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

    应用rails进行敏捷Web开发·第三版

    10. **Ajax与JavaScript**:Rails内置了Prototype JavaScript库,也支持jQuery等其他库,方便实现异步更新和页面交互。 11. **部署与运维**:了解如何在各种服务器环境如Heroku、AWS上部署Rails应用,以及如何进行...

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

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

    Apress.Practical.Rails.Social.Networking.Sites.Jun.2007.eBook-BBL.pdf

    ### 实践Rails社交网络站点开发知识点总结 #### 一、书籍基本信息 - **书名**:《实践Rails社交网络站点》 - **作者**:Alan ...通过阅读本书,你可以掌握利用Rails高效地开发高质量社交网络站点的方法和技巧。

    manning.ruby.in.practice.mar.2009.pdf

    它可能会介绍RSpec、Cucumber等流行测试工具的使用方法,以及如何构建单元测试、集成测试和系统测试,确保代码质量。此外,还可能涉及持续集成(CI)的设置和最佳实践,以自动化测试流程,提高软件开发效率。 #### ...

    rail on ruby

    - 支持敏捷开发和测试驱动开发。 - 内置 RESTful 架构支持。 #### 二、Rails 开发环境搭建 - **Ruby 版本管理**: 使用 RVM (Ruby Version Manager) 来管理不同项目所需的 Ruby 版本。 - **安装 Rails**: - 安装...

    zhihu_clone:这是 zhihu.com 通过 Ruby On Rails 的克隆

    - **背景任务**:使用 Sidekiq 或 Resque 处理异步任务,如发送邮件、执行耗时操作。 - **负载均衡与集群**:随着用户增长,需要考虑如何扩展应用,如使用 Nginx、Puma 或 Unicorn。 zhihu_clone 项目是一个极好...

    order

    测试是确保代码质量和系统稳定的重要环节,通常包括单元测试、集成测试和端到端测试。 总的来说,这篇博文可能深入探讨了如何利用源码和工具实现一个高效、可靠的订单处理系统,包括后端架构设计、支付集成、数据库...

    Edgar:基于Rails3的CRM(客户关系管理)应用程序-开源

    其中,ActionController的异步处理支持使得Web应用可以更高效地处理请求,ActionMailer的改进则优化了邮件发送的处理。此外,ActiveRecord的查询接口也得到了加强,提供了更丰富的查询选项和更好的SQL兼容性。 在...

    Raddit:我建立了一个类似于 Reddit 或 Hacker News 的链接聚合站点。 (Ruby on Rails)

    考虑到性能和扩展性,可能还需要使用缓存服务(如 Redis 或 Memcached)来减轻数据库压力,以及使用背景任务队列(如 Sidekiq 或 Resque)来异步处理耗时操作,如发送邮件通知。 总之,"Raddit"项目是一个全面的 ...

    Laravel开发-caracal .zip

    Laravel 自带了 PHPUnit 测试框架,为开发者提供了丰富的断言和模拟功能,以进行单元测试、功能测试和集成测试。Laravel 的 Mockery 框架和 Facades 功能使得测试更加容易编写和理解。 **9. 任务调度** Laravel 的...

    activejob-uniqueness-master.rar

    然而,在某些场景下,我们可能需要确保这些异步任务的唯一性,避免重复执行同一任务,比如发送邮件、创建用户等。这时,`activejob-uniqueness` gem便派上了用场。这个项目提供了对ActiveJob的扩展,实现了任务的...

    Laravel开发-media .zip

    Laravel提供强大的测试支持,包括PHPUnit集成,方便编写单元测试和功能测试。断言库使得测试代码的编写更加简洁。 9. **队列与任务调度** Laravel的队列系统允许开发者异步处理耗时任务,提高应用性能。任务调度...

    noqueue

    在Rails开发中,队列通常用于处理耗时的任务,如发送电子邮件、数据处理或异步任务,以提高应用性能。"noqueue"可能是一个尝试减少对这些传统队列系统的依赖,或者提供一种更轻量级、高效的解决方案。 【描述】中的...

Global site tag (gtag.js) - Google Analytics