`
liuqiang
  • 浏览: 161938 次
  • 性别: Icon_minigender_1
  • 来自: 华东
社区版块
存档分类
最新评论

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

    博客分类:
  • Ruby
阅读更多

       在平时的开发过程中,经常会遇到一些定时任务的需求,比如定时报表的生成,一般是在夜间的某个时间段进行,或者是每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当然也支持某个时间点做某事,某个时间段做某事等等,感兴趣的朋友可以玩玩这个

 

分享到:
评论
19 楼 qichunren 2010-01-07  
所以说不要将这个脚本改在初始化目录中,你可以把它放在script目录里,作为一个单独的后台ruby进程。

require 'rubygems'
require 'rufus/scheduler'

scheduler = Rufus::Scheduler.start_new

# 每天早上10:10,将订单提示支付记录的短信发出
scheduler.cron '10 10 * * *' do
  system("rake sms:send_tip_pay_messages RAILS_ENV=production")
end

scheduler.join  # 要放上这个来居启动线程,而在初始化目录中是由rails启动时顺带启动的


然后在项目目录中执行:
ruby script/scheduler.rb &

就ok了。
18 楼 luoping0425 2010-01-07  
这样的话,如果启动多个项目实例就会有多个运行定时任务,这样怎么解决?
17 楼 poshboytl 2009-11-24  
机器人 写道
这个有这个问题啊,如果后端是多个mongrel进程,那么多造成多个同时执行的重复任务呢

是的,我就遇到这个问题了... 这两天忙其他项目,还没时间去管呢。 机器人同学也遇到了?
16 楼 机器人 2009-11-19  
这个有这个问题啊,如果后端是多个mongrel进程,那么多造成多个同时执行的重复任务呢
15 楼 qichunren 2009-08-20  
如果是任务中涉及到 数据库层面的,我们是直接cron+存储过程 的。
14 楼 phoenixup 2009-08-20  
火星叔叔马丁 写道
刑天战士 写道
有了crontab,为啥要用这个?


老刑死脑筋了 ruby提倡的不就是yet another way
话说有老婆的人 就不能去cj看showgirl了?


我笑喷了。。。
13 楼 Hooopo 2009-08-12  
saberma 写道
本来是用whenever挺好的
现在项目要在window下跑定时任务:(

script/runner
rails 原装产品,跨平台
12 楼 arkxu 2009-08-04  
cron + rake是王道

再复杂的都可以写在rake里面。和shell无关
11 楼 rubyrock 2009-08-03  
我们现在是用  crond + rake,用下来还不错的。
10 楼 derk 2009-07-29  
选插件的话就delayed-job吧
9 楼 deng131 2009-07-29  
下一站,火星 写道
mccxj 写道
关于定时操作,记得在rubyinside里边就见过不少。少说有3,4个了
用cron就非常方便了,定期跑跑ruby脚本,rake任务就ok了


为什么rails里面有个database migrate?一样可以用sql脚本完成啊


一直也没有找到合适的定是任务?
8 楼 下一站,火星 2009-07-29  
mccxj 写道
关于定时操作,记得在rubyinside里边就见过不少。少说有3,4个了
用cron就非常方便了,定期跑跑ruby脚本,rake任务就ok了


为什么rails里面有个database migrate?一样可以用sql脚本完成啊

7 楼 mccxj 2009-07-28  
关于定时操作,记得在rubyinside里边就见过不少。少说有3,4个了
用cron就非常方便了,定期跑跑ruby脚本,rake任务就ok了
6 楼 saberma 2009-07-28  
本来是用whenever挺好的
现在项目要在window下跑定时任务:(
5 楼 刑天战士 2009-07-28  
Raecoo 写道
whenever 也不错

whenever貌似就是把ruby的东西翻译成crontab...
4 楼 Raecoo 2009-07-28  
whenever 也不错
3 楼 刑天战士 2009-07-27  
有了crontab,为啥要用这个?
2 楼 richyzhang 2009-07-27  
目前看来,ruby的程序都还不太适合作为长期跑的进程存在.
它们的使用方式还是运行一段时间就exit,需要的话再restart比较好.
1 楼 qichunren 2009-07-27  
惊现老大发贴。

ruby或者说rails中的定时任务的解决方案太多了,我目前见过的就不少。

相关推荐

    Rails3 使用rake启动后台任务

    在 Rails3 中,rake 不仅用于基本的项目管理,还可以用于启动后台任务,这在处理耗时操作、异步任务或者批量数据处理时非常有用。后台任务可以避免阻塞用户界面,提高应用程序的响应速度。以下是一些关于如何在 ...

    bower-rails, 在 Rails 上,为 Bower 设置类似 DSL + rake任务.zip

    bower-rails, 在 Rails 上,为 Bower 设置类似 DSL + rake任务 rails Bower 对 Rails 项目的支持。 依赖文件是 Rails root 目录中的bower.json,如果使用 DSL,则为 Bowerfile 。 查看最新变更和发布的变更日志文件...

    rails指南 中文版

    9. **ActiveJob**:Rails的后台任务处理框架,可以配合各种队列服务(如Resque、Sidekiq等)处理异步任务。 10. **Rails Console**:提供了一个交互式的命令行工具,用于检查和调试应用,执行Ruby代码,以及与...

    使用Aptana+Rails开发Rails Web应用(中文)

    安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

    rails-assets, 在 Rails 中,资产管理的解决.zip

    rails-assets, 在 Rails 中,资产管理的解决 Rails 资产 Bundler 到 Bower 代理本自述文件涉及项目的开发方面。 访问站点了解如何在你的应用程序中使用 Rails 资产。 插件开发设置git clone git@github.com:tenex/r

    Rails 中mongrel的安装

    在Rails项目中安装Mongrel通常通过RubyGems进行,这是一个Ruby的包管理器。首先确保RubyGems已经安装,然后在命令行执行以下命令: ```bash gem install mongrel ``` 安装完成后,可以通过`mongrel_rails`命令来...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    Ruby-getschwifty利用ActiveJobActionCable在后台作业队列中渲染部分Rails视图

    在Rails应用中,ActiveJob是处理后台任务的抽象层,而ActionCable则是实现Websocket通信的库,允许实时的双向通信,即服务器推送更新到客户端。 ActiveJob是Rails 4.2引入的一个特性,它提供了一种统一的接口来创建...

    Ruby On Rails中文教材(PDF)

    4. **ActiveRecord**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL。 5. **Scaffolding**:Rails的快速开发工具,能自动生成CRUD(创建、读取、更新、删除)操作的模型、...

    Rails项目源代码

    在Rails中,可以使用Devise这样的gem来处理用户身份验证,提供注册、登录、密码重置等功能。用户模型通常会包含确认令牌、加密密码等相关字段。 4. **数据库和ActiveRecord**: Rails使用ActiveRecord作为ORM,它...

    关于rails 3.1 cucumber-rails 1.2.0

    总的来说,了解和熟练掌握Rails 3.1和Cucumber-Rails 1.2.0的用法,对于任何希望在Ruby on Rails环境中进行高效、高质量开发的团队来说都是至关重要的。通过阅读相关的博客文章(如给出的链接),开发者可以深入学习...

    rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板.zip

    rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板 Rails 电子邮件预览 使用这里 Rails 引擎在浏览器中预览电子邮件。 兼容 Rails 4.2 。电子邮件审阅: 所有电子邮件预览的列表: 代表有两个主题...

    shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现.zip

    shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现 这是一个 Rails 应用程序,它使用 Shoppe 构建。 它具有一个可以爱的设计,以充分演示Shoppe平台提供的功能以及它在 Rails 应用程序中的。 正在启动要开始...

    Rails

    2. **Active Record**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL语句。 3. **Action Controller**:负责处理HTTP请求并调用模型来执行业务逻辑,然后将结果传递给视图...

    rails版本区别

    在Rails 2中,开发者通过一系列以`script/`开头的脚本来执行各种任务,如生成代码、启动服务器或数据库控制台等。然而,在Rails 3中,这些命令的调用方式被简化并统一化。例如,`script/generate`被替换为`rails g`...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    rails敏捷开发的购物车系统

    在Rails中,可以使用ActiveRecord来操作数据库。创建购物车模型(Cart)和商品模型(Product),定义它们之间的关系,如多对多关系,通过一个关联表记录每个购物车包含的商品及其数量。使用`has_and_belongs_to_many...

    rails本地安装包完整版

    7. **activerecord-2.1.0.gem**:ActiveRecord是Rails中的ORM(对象关系映射)库,负责将数据库表映射为Ruby类,使得开发者可以通过面向对象的方式来操作数据库,而无需编写SQL语句。 这个本地安装包特别适合网络...

Global site tag (gtag.js) - Google Analytics