ruby执行周期性任务的三种gem介绍_ruby专题

1.whenever

首先,whenever是基于linux的cron服务的,所以,在windows平台上没有直接的方法使用该gem。whenever严格来说应该算一个cron的翻译器,将ruby代码翻译为cron脚本,从而将周期性任务转交给cron实际去完成。对于精通cron的shell程序员来说可能不值一提,但对rubyist却不是。首先,我们可以使用ruby语言来书写任务代码,在ruby层面上控制代码,避免了和一些shell脚本的切换;另外,cron命令很强大,但我总是记不住它的命令参数,为了避免一遍一遍去man它的手册,还是ruby语法比较亲民。

首先,安装whenever:

复制代码 代码如下:

$ gem install whenever

   然后切换到任务编写文件夹project下,保证该文件夹下有一个config文件夹。如果是在rails项目中建立whenever任务,则config文件夹已经存在了。

复制代码 代码如下:

$ cd /project 
$ wheneverize .

whenverize命令会在config文件夹下创建schedule.rb文件,我们的任务代码需要在该文件中定义。下面的是schedule.rb文件示例:

every 30.minutes do
 runner "Blog.parseAll"
end

every 30.minutes, :at => 17 do
 runner "PostWeibo.post"
end

every 15.minutes do
 runner "WeiBo.update"
end

every 30.minutes, :at => 20 do
 runner "RSSGenerator.generate"
end

every 1.day, :at => '2:00 am' do
 command "cd /var/www/mzread/current/public && gunzip -c sitemap1.xml.gz > sitemap1.xml && touch sitemap1.xml "
end

如示例代码,whenever默认定义了三种任务类型:runner, rake, command,我们也可以定义自己的任务,比如,下面的代码定义了脱离rails环境,独立执行ruby代码的类型:

job_type :ruby, "cd :path && /usr/bin/ruby ':task'.rb" 

every :hour do
 ruby 'have_a_rest'
end

该示例描述了:每个小时会执行一次当前文件夹下的have_a_rest.rb脚本。

下面看看怎么将任务写入cron服务。 

$ whenever   #不带参数的whenever会显示转换程cron任务的代码,不写入cron任务表 
$ whenever -w #写入cron任务表,开始执行 
$ whenever -c #取消任务
如果要查看cron任务表,也可以使用linux的命令列出所有cron任务:

$ crontab -l

2.sidetiq

sidetiq是sidekiq的亲兄弟,如果在rails项目中使用sidekiq来处理后台任务,那么就用sidetiq来交付周期性任务也显得比较自然。

安装sidetiq:

复制代码 代码如下:

$ [sudo] gem install sidetiq

      定义周期性任务:

class MyWorker
 include Sidekiq::Worker
 include Sidetiq::Schedulable 

 recurrence { daily } 

 def perform
 # do stuff ...
 end
end

     sidetiq和sidekiq一样,依赖于redis消息来处理消息。当rails项目启动后,这些周期性任务会自动加载执行。

3.clockwork

clockwork和sidetiq一样,也不必依赖于cron,可以适应”跨平台“要求。下面是代码示例(clock.rb):

require 'clockwork'
include Clockwork 

handler do |job|
 puts "Running #{job}"
end 

every(10.seconds, 'frequent.job')
every(3.minutes, 'less.frequent.job')
every(1.hour, 'hourly.job') 

every(1.day, 'midnight.job', :at => '00:00')

    启动任务:

$ clockwork clock.rb
Starting clock for 4 events: [ frequent.job less.frequent.job hourly.job midnight.job ]
Triggering frequent.job

如果要带上rails环境,就在任务文件加入:

require './config/boot'
require './config/environment'

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ruby
周期性
ruby gem、ruby gem 安装、ruby gem是什么、ruby gem 源、ruby redis gem 安装,以便于您获取更多的相关知识。

时间: 2024-09-14 01:01:01

ruby执行周期性任务的三种gem介绍_ruby专题的相关文章

Ruby单元测试框架TestUnit的替代者MiniTest介绍_ruby专题

MiniTest 是新一代的 Ruby 测试框架,它已经成为 Ruby 1.9 的内置测试框架,据说它也将成为Rails 4的默认测试框架,可谓前途一片光明. MiniTest 为什么成为最新 Ruby 和 Rails 的首选,它有哪些吸引人的东西呢? Ruby 1.8时代,Ruby 和 Rails 的默认测试框架都是 TestUnit,TestUnit 历史悠久,它最大的问题是太慢,太臃肿了,它包含了一堆现在很少使用的第三方库,比如GTk v1, GTk v2, FxRuby,另外一个大问题的

Ruby微信开发的几个开源项目介绍_ruby专题

最近陆续有不少用Rails开发微信项目的朋友在Github上开始使用weixin_rails_middleware.weixin_authorize,也不少人谈到Ratchet,春节开始到现在,一直有做微信的开发,现在在论坛上发布出来,希望让更多人知道这些gem的存在,更快速的完成你们手中的任务. 1.一(两)条命令搭建Rails微信版本 按照最简洁的速度,10分钟可以跑起一个微信的项目: https://github.com/lanrion/weixin_rails_middleware 自动

苹果Mac虚拟机安装Win7系统的三种方法介绍

  苹果Mac虚拟机安装Win7系统的三种方法介绍          解决方法一: 1.我们这里以免费的虚拟机Virtual Box为例; 2.启动 Virtual Box 以后,点击窗口左上角的"新建"按钮; 3.接下来为虚拟取一个名称,可随意取.系统类型保持不变,版本在下拉列表中选择 Windows 7.点击"继续"按钮; 注:如果你安装的是 Windows 64 系统的话,在下拉列表中选择时,请选择 Windows 7 (64 bit). 4.然后为虚拟机分配

百度输入法三种输入模式介绍

  在百度输入法中包含有全拼.简拼和中英文混拼三种模式,用户在输入文字内容时,可使用不同的输入方式来组合输入使用,不过在一些用于对于这三种输入方式不是特别的了解,故此小编为大家提供了百度输入法三种输入模式的详细介绍!需要的用户赶快了解下吧! 百度输入法目前支持全拼.简拼和中英文混拼三种模式: 全拼输入是拼音输入法最基本的输入模式.在全拼模式下,输入词条的完整拼音即可得到相应的候选字词,如需输入"百度"时,输入"baidu"即可得到候选: 简拼是通过输入声母或声母的首

对优化Ruby on Rails性能的一些办法的探究_ruby专题

1.导致你的 Rails 应用变慢无非以下两个原因: 在不应该将 Ruby and Rails 作为首选的地方使用 Ruby and Rails.(用 Ruby and Rails 做了不擅长做的工作) 过度的消耗内存导致需要利用大量的时间进行垃圾回收. Rails 是个令人愉快的框架,而且 Ruby 也是一个简洁而优雅的语言.但是如果它被滥用,那会相当的影响性能.有很多工作并不适合用 Ruby and Rails,你最好使用其它的工具,比如,数据库在大数据处理上优势明显,R 语言特别适合做统计

对Ruby on Rails进行高效的单元测试的教程_ruby专题

在笔者开发的系统中,有大量的数据需要分析,不仅要求数据分析准确,而且对速度也有一定的要求的.没有写测试代码之前,笔者用几个很大的方法来实现这种需求.结果可想而知,代码繁杂,维护困难,难于扩展.借业务调整的机会,笔者痛定思痛,决定从测试代码做起,并随着不断地学习和应用,慢慢体会到测试代码的好处.     改变思路:能做到从需求到代码的过程转换,逐步细化:     简化代码:力图让每个方法都很小,只专注一件事:     优化代码:当测试代码写不出来,或者需要写很长的时候,说明代码是有问题的,是可以被

Terry七月Ruby读书笔记(比较详细)第1/4页_ruby专题

Page 3 概述 ¨         解释执行:Python,Ruby,交互性很好: ¨         编译执行:Pascal, C,速度较快. n         本地执行,如C,C++: n         虚拟机执行,如Java, C#.   ¨         动态语言,如JavaScript,Ruby: ¨         静态语言,如C++,Java.   语言 ¨         语法 关键字 ¨         语义 ¨         语用   松本行弘(Matz) 199

现在用户使用移动搜索的三种情况介绍

中介交易 SEO诊断 淘宝客 云主机 技术大厅 现时的移动设备的兴起,如何争取到移动设备的用户成为现时互联网业内的一个重要的目标.而移动搜索这一概念在智能手机刚面市时已经开始流行了.经过了多年的尝试,现在的移动搜索又变成什么样子了呢. 首先,大家可以先问一下自己,自己有用过移动搜索吗?可能有人自己也不知道自己有没用过,因为有人可能不知道什么才是真正的移动搜索,移动搜索有没有广义或狭义之分.或者换一个问法吧,大家有在移动设备上搜索过东西吗?这样说的话大部分人的答案都是肯定的吧,因为没有一个人什么都

Ruby迭代器的7种技巧分享_ruby专题

Ruby由于吸收了Perl的正则表达式和Python的可读性,所以其中的计数取值方法,是非常人性化和灵活的,这里可以举例来说明下:一.打印7次"hello,world",如下: 复制代码 代码如下: 7.times{puts "hello,world"} #在这里,puts的作用等同于print+"\n" 二.依次打印1..9,在ruby中的方法就更多了,这里用比较简单的方式来实现,如下: 复制代码 代码如下: (1..9).each{|i| p