异步执行在当前(这个东西在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
分享到:
相关推荐
此外,Rails 4.2.0引入了`Active Job`,这是一个抽象层,用于处理异步任务和后台作业。它与各种后台作业队列库如Resque、Sidekiq和Delayed Job兼容,极大地提高了应用的响应速度和用户体验。 关于Ruby 4.2.0,最大...
- **测试**:介绍如何为Ruby on Rails项目编写单元测试和集成测试。 - **AJAX**:学习如何在Ruby on Rails应用中集成异步JavaScript和XML技术。 - **部署、安全与性能**:讲解如何部署Ruby on Rails应用、实施安全...
综上所述,《Messaging with Rails》这篇文章会涵盖Rails框架下构建消息传递系统的主要方面,包括模型设计、关联建立、控制器与视图的实现、通知功能、异步处理以及测试和安全措施。通过学习这些内容,开发者可以...
描述中提到的测试场景,就是通过这个插件一次性尝试发送一百封邮件,这可能是为了测试邮件服务的稳定性和性能,同时避免阻塞主线程,影响用户界面的响应。 在实际操作中,使用这样的插件通常涉及以下步骤: 1. ...
5. **测试(Testing)**:Rails强调TDD(Test Driven Development)和BDD(Behavior Driven Development),书中可能介绍Rspec、Capybara等测试工具的使用,包括单元测试、集成测试和功能测试。 6. **数据库迁移...
以上只是Awesome Rails Gem列表中的一部分,实际列表还包含了更多用于数据库迁移、日志记录、邮件发送、国际化、安全、缓存、版本控制等各个方面的Gem。通过这个列表,开发者可以快速找到适合自己项目的Gem,极大地...
10. **Ajax与JavaScript**:Rails内置了Prototype JavaScript库,也支持jQuery等其他库,方便实现异步更新和页面交互。 11. **部署与运维**:了解如何在各种服务器环境如Heroku、AWS上部署Rails应用,以及如何进行...
可以利用`delayed_job`这样的背景任务库来异步发送邮件,以提高用户体验。 综上所述,理解并遵循这些最佳实践能够帮助你在Ruby on Rails中构建高效且健壮的Mailer系统,同时确保邮件的可靠性和用户体验。
### 实践Rails社交网络站点开发知识点总结 #### 一、书籍基本信息 - **书名**:《实践Rails社交网络站点》 - **作者**:Alan ...通过阅读本书,你可以掌握利用Rails高效地开发高质量社交网络站点的方法和技巧。
它可能会介绍RSpec、Cucumber等流行测试工具的使用方法,以及如何构建单元测试、集成测试和系统测试,确保代码质量。此外,还可能涉及持续集成(CI)的设置和最佳实践,以自动化测试流程,提高软件开发效率。 #### ...
- 支持敏捷开发和测试驱动开发。 - 内置 RESTful 架构支持。 #### 二、Rails 开发环境搭建 - **Ruby 版本管理**: 使用 RVM (Ruby Version Manager) 来管理不同项目所需的 Ruby 版本。 - **安装 Rails**: - 安装...
- **背景任务**:使用 Sidekiq 或 Resque 处理异步任务,如发送邮件、执行耗时操作。 - **负载均衡与集群**:随着用户增长,需要考虑如何扩展应用,如使用 Nginx、Puma 或 Unicorn。 zhihu_clone 项目是一个极好...
测试是确保代码质量和系统稳定的重要环节,通常包括单元测试、集成测试和端到端测试。 总的来说,这篇博文可能深入探讨了如何利用源码和工具实现一个高效、可靠的订单处理系统,包括后端架构设计、支付集成、数据库...
其中,ActionController的异步处理支持使得Web应用可以更高效地处理请求,ActionMailer的改进则优化了邮件发送的处理。此外,ActiveRecord的查询接口也得到了加强,提供了更丰富的查询选项和更好的SQL兼容性。 在...
考虑到性能和扩展性,可能还需要使用缓存服务(如 Redis 或 Memcached)来减轻数据库压力,以及使用背景任务队列(如 Sidekiq 或 Resque)来异步处理耗时操作,如发送邮件通知。 总之,"Raddit"项目是一个全面的 ...
Laravel 自带了 PHPUnit 测试框架,为开发者提供了丰富的断言和模拟功能,以进行单元测试、功能测试和集成测试。Laravel 的 Mockery 框架和 Facades 功能使得测试更加容易编写和理解。 **9. 任务调度** Laravel 的...
然而,在某些场景下,我们可能需要确保这些异步任务的唯一性,避免重复执行同一任务,比如发送邮件、创建用户等。这时,`activejob-uniqueness` gem便派上了用场。这个项目提供了对ActiveJob的扩展,实现了任务的...
Laravel提供强大的测试支持,包括PHPUnit集成,方便编写单元测试和功能测试。断言库使得测试代码的编写更加简洁。 9. **队列与任务调度** Laravel的队列系统允许开发者异步处理耗时任务,提高应用性能。任务调度...
在Rails开发中,队列通常用于处理耗时的任务,如发送电子邮件、数据处理或异步任务,以提高应用性能。"noqueue"可能是一个尝试减少对这些传统队列系统的依赖,或者提供一种更轻量级、高效的解决方案。 【描述】中的...