Rails Cron 一个Rails的定时执行插件介绍

定时任务,Linux下cron准确的实现这个功能。通常,在Rails开发中,我们也遇到类似的需要,例如,我自己就在开发过程中,有这样一个需要:

有一个专业逻辑的报表查询,表结果如下:

CREATE TABLE `production`.`datalogs` (
`id` int(11) NOT NULL auto_increment,
`ts` datetime default NULL,
`sample_count` int(11) default NULL,
`attenuation` float default NULL,
`start_freq` int(11) default NULL,
`stop_freq` int(11) default NULL,
`min_val` float default NULL,
`val` float default NULL,
`max_val` float default NULL,
`image` blob,
`min_image` blob,
`max_image` blob,
`site_id` int(11) default NULL,
`noise_floor` float default NULL,
PRIMARY KEY (`id`),
KEY `site_ts_idx` (`site_id`,`ts`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


其中,主要的数据是blob结构的image数据。由于数据量比较大往往生产报表的速度很慢,所以,我们为了优化性能,采用了很多不同的办法。例如,用[url=http://hlee.iteye.com/admin/blogs/443606]mysql function[/url]代替ruby的逻辑运算(以后的文章会具体描述这个优化的实现,和包括udf的调试),例如,简单的zip压缩,还例如,Flex端的显示。当然,也包括,分段压缩。

道理上讲,用户不会关心半个月之前的,某天里几秒的具体数据。比如,2:20 到3:20的数据。所以,我们就把半月之前的数据压缩成了一个,每天一条记录。这样就大大提高了运行速度。但这就需要定时任务了。

Rails定时任务,实现有很多不同的选择。用linux的cron job显然是比较大众的选择,后面我也会用专门的文章介绍,我是怎么用的和使用过程的一些问题。然而,linux的cron job也有一些问题:

[list=1]
[*]启动时会明显的占用资源,这里指需要加载Rails环境
[*]同步后台定时进程,需要比较大的内存
[*]很难从Rails的项目来管理,定时的后台进程,多数是数据库交互
[/list]


而RailsCron插件就很好通过RoR实例来执行定时任务,同时较好的解决上面linux Cron job带来的问题。典型的RailsCron插件这样使用:
[b]RailsCron的安装[/b]

ruby script/plugin#插件安装

并创建一个rails_crons的表

[b]RailsCron的调用[/b]
RailsCron.create(
:command => "Object.do_something()",
:start => 2.minutes.from_now,
:every => 12.hours, # default: 1.day
:finish => 2.years.from_now # optional
)
RailsCron.destroy_all
RailsCron.find_by_command "some_command"



[b]使用 ACTS_AS_BACKGROUND定义需要执行定时任务的ActiveRecord[/b]

添加ACTS_AS_BACKGROUND的描述以便可以后台执行。如下:

class EmailQueue << ActiveRecord::Base
background :deliver, :every => 1.minute, :concurrent => true
enddef self.deliver
#process the queue
end


[b]RailsCron的定制参数[/b]


[list]
[*]:sleep—执行的间隔频率,默认:1秒
[*]:db_sleep—访问数据库的间隔频率,默认:1秒
[/list]

[b]RailsCron的启动与停止[/b]

RailsCron通过Rake启动和停止,具体命令如下:

[list]
[*]cron_start—以守护进程(daemon)启动RailsCron
[*]cron_foreground—以前台启动启动RailsCron
[*]cron_stop—安全停止
[*]cron_kill
[*]cron_graceful—安全重启
[*]cron_status
[/list]

以上命令是linux下使用,Windows用户需要使用
ruby script\runner ‘RailsCron.start’

运行和Ctrl-C停止

环境变量的设置:

[list]
[*]RAILSCRON_SUDO—后台进程将以如下指定用户身份运行,默认不使用。
[*]RAILS_ENV—Default: 默认环境development
[/list]


注释:该文参考原插件说明的readme和相关文章
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值