Rails Job 配置Delayed Job使用

在Rails里面实现延迟任务,选择Delayed Job 的 active record方案(使用active record,不需要额外安装软件支撑);
延迟任务数据保存在Rails active record适配的数据库中;
在新版本的Rails中,延迟任务已经统一接口到Rails Job框架中;直接使用Rails Job框架,配置delayed job适配器即可使用;

配置Gemfile

gem "daemons"
gem 'delayed_job'
gem 'delayed_job_active_record'

bundle install

配置config/application.rb

config.active_job.queue_adapter = :delayed_job

自定义worker选项

创建config/initializers/delayed_job_config.rb

Delayed::Worker.destroy_failed_jobs = false #如果任务执行失败,任务记录是否从数据库中删除
Delayed::Worker.sleep_delay = 60    #如果没有任务,后台worker休眠时间;也可以设置Delayed::Worker.delay_jobs = false 使worker不休眠
Delayed::Worker.max_attempts = 3 #任务失败后最大重试次数
Delayed::Worker.max_run_time = 10.minutes # 任务最大执行时间
Delayed::Worker.read_ahead = 10   #每次从数据库中取多少条任务数据
Delayed::Worker.default_queue_name = 'default'  #默认队列名称
Delayed::Worker.delay_jobs = !Rails.env.test?   #如果没有任务后台worker是否需要休眠,如果需要,将休息sleep_delay秒
Delayed::Worker.raise_signal_exceptions = :term # Delayed::Worker.raise_signal_exceptions = :term 进程终结的时候抛出SignalException;从而使得正在进行的任务中断和unlocked;从而该任务可以之后被其他worker重新执行
Delayed::Worker.logger = Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))   #Log信息

创建任务数据表结构

rails generate delayed_job:active_record
rake db:migrate

创建一个任务

rails generate job xxx
#  打开app/jobs/xxx_job.rb
...
def perform(*args)
  Rails.logger.info("xxx job args is #{args}")
end
...

启动后台进程

RAILS_ENV=production bin/delayed_job start
#其他命令:
# RAILS_ENV=production bin/delayed_job restart
# RAILS_ENV=production bin/delayed_job stop
# 等等

测试

# rails c 后
XxxJob.set(wait:10.second).perform_later("Test job")
# 10秒后就会在log文件里面发现输出日志

参考资料

Rails 4.2 新增后端任务框架 - Active Job
Active Job Basics
delayed_job on github

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 128,862评论 18 137
  • Awesome Ruby Toolbox Awesome A collection of awesome Ruby...
    debbbbie阅读 1,835评论 0 3
  • 在学习rails时,我们有必要了解rails程序中的目录结构。rails对于不同的文件,不同的代码存放在什么样的文...
    vito1994阅读 5,195评论 1 17
  • 模型 一、Active Record 基础介绍Models,数据库持久性以及Active Record模式 Act...
    廖马儿阅读 5,384评论 0 2
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 43,077评论 6 343
  • 对足球的映像,最深刻的莫过于,十年前,在06年世界杯决赛上“齐祖”对马特拉齐的那一撞,随即,他被红牌罚下。 而法国...
    LilyanSiena阅读 184评论 0 4
  • 应用场景:腾龙特训营/团队内化建设 项目性质:团队合作类挑战项目 活动时间:60分钟左右 使用道具:计时器、口哨 ...
    成电黄正中阅读 2,091评论 0 0
  • 上个周末,我们在深圳愉快的进行了一次娜娜的读者小茶聚,我非常惊喜地发现有这么多喜欢我文字的朋友们,大家也很支持我们...
    娜娜aruna阅读 127评论 0 5
  • 男人不坏,女人不爱。男人越坏,女人越爱!那你应该如何成为人见人爱的坏男孩? 这是个追求个性的时代,很多人有自己独特...
    男神班阅读 84评论 0 1
  • 地铁口,匆匆走过,和往常一样。 偶尔撇到一个男生,低头正在锁自行车。她多看了一眼。 之所以注意到他,是因为他穿着他...
    山楂小主阅读 218评论 2 3