简简单单在rails中做定时任务

本文介绍了一种使用Ruby语言实现的简单而高效的定时任务解决方案——rufus-scheduler。相较于复杂的shell脚本或BackgrounDrb等工具,rufus-scheduler提供了更易于维护且跨平台的定时任务管理方式,适用于多种定时需求。

       在平时的开发过程中,经常会遇到一些定时任务的需求,比如定时报表的生成,一般是在夜间的某个时间段进行,或者是每10分钟清空一些临时表的任务,记得以前有人提出过一个 BackgrounDrb 问题,个人认为BackgrounDrb不是那么好用,Robbin提出的是利用linux shell做,由于unix操作系统自带有进程调度系统cron,所以定时执行rake就可以了,但如果做一些复杂的定时操作,那么势必会造成复杂的shell脚本,个人认为一、不利于维护,二、在切换开发环境的时候不是很方便,本着能用简单的技术解决的问题就不要用复杂的技术的原则,推荐一下rufus-scheduler  http://rufus.rubyforge.org/rufus-scheduler/ ,貌似这个是日本人写的,看看它的使用说明,感觉作者很有匠人的气质,这个东西用起来真贴心,这也充分说明了拿ruby做系统维护也是一件体验很棒的事情

 

引用

gem install rufus-scheduler



在initializers文件夹下新建一个文件task.rb

引用


require 'rubygems'
require 'rufus/scheduler'
scheduler = Rufus::Scheduler.start_new

scheduler.every("2s") do
   puts Time.now
end



over,基本上可以解决我们日常中的定时任务,rufus-scheduler当然也支持某个时间点做某事,某个时间段做某事等等,感兴趣的朋友可以玩玩这个

 

### 设置 Rails 应用中的 Crontab 定时任务 为了在 Rails 应用中利用 crontab 来调度任务,可以采用 `whenever` gem 或者直接编写系统的 cron 作业。以下是两种方法的具体实现: #### 使用 Whenever Gem 方法 安装并配置 `whenever` 可简化创建和管理定时任务的过程。 1. 添加 `gem 'whenever', require: false` 到项目的 `Gemfile` 中,并运行 `bundle install` 命令来安装该 gem[^2]。 2. 运行命令 `bundle exec wheneverize .` 初始化项目结构,在根目录下会生成一个名为 `config/schedule.rb` 文件用于定义计划任务。 3. 编辑 `schedule.rb` 文件以添加所需的周期性操作。例如: ```ruby every 1.day, at: '4:30 am' do runner "MyModel.some_method" end ``` 4. 更新服务器上的 crontab 表格以便反映新的更改。可以通过执行 `bundle exec whenever --update-crontab` 实现这一点。 这种方法的优点在于可以直接通过 Ruby 语法指定要执行的任务逻辑而无需关心底层 shell 脚本细节;然而需要注意的是每当触发器被激活时整个应用程序环境会被重新加载,对于高频率或复杂初始化过程可能带来性能开销。 #### 手动编辑系统级 Crontab 如果希望绕过上述提到的应用程序级别的限制,则可以选择直接修改操作系统层面的 crontab 文件来进行更细粒度控制。 1. 登录到目标机器上拥有适当权限的操作员账户。 2. 输入命令 `crontab -e` 开启当前用户的个人 crontab 配置文件编辑模式。 3. 插入如下格式的一条或多条记录(假设已知路径 `/path/to/rails/script` 是指向待调用脚本的位置): ``` */5 * * * * cd /path/to/your/app && RAILS_ENV=production bundle exec rake my_task >> log/cron.log 2>&1 ``` 4. 保存退出后即刻生效新加入的时间表项。 这种方式虽然更加灵活但也意味着开发者需要自行处理好依赖关系以及确保所有必要的库都处于可用状态。 无论采取哪种方式都应该充分测试所部署的服务端行为以确认预期功能正常运作并且不会引发意外副作用比如数据损坏等问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值