定时任务,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数据。由于数据量比较大往往生产报表的速度很慢,所以,我们为了优化性能,采用了很多不同的办法。例如,用
mysql function代替ruby的逻辑运算(以后的文章会具体描述这个优化的实现,和包括udf的调试),例如,简单的zip压缩,还例如,Flex端的显示。当然,也包括,分段压缩。
道理上讲,用户不会关心半个月之前的,某天里几秒的具体数据。比如,2:20 到3:20的数据。所以,我们就把半月之前的数据压缩成了一个,每天一条记录。这样就大大提高了运行速度。但这就需要定时任务了。
Rails定时任务,实现有很多不同的选择。用linux的cron job显然是比较大众的选择,后面我也会用专门的文章介绍,我是怎么用的和使用过程的一些问题。然而,linux的cron job也有一些问题:
- 启动时会明显的占用资源,这里指需要加载Rails环境
- 同步后台定时进程,需要比较大的内存
- 很难从Rails的项目来管理,定时的后台进程,多数是数据库交互
而RailsCron插件就很好通过RoR实例来执行定时任务,同时较好的解决上面linux Cron job带来的问题。典型的RailsCron插件这样使用:
RailsCron的安装
ruby script/plugin#插件安装
并创建一个rails_crons的表
RailsCron的调用
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"
使用 ACTS_AS_BACKGROUND定义需要执行定时任务的ActiveRecord
添加ACTS_AS_BACKGROUND的描述以便可以后台执行。如下:
class EmailQueue << ActiveRecord::Base
background :deliver, :every => 1.minute, :concurrent => true
enddef self.deliver
#process the queue
end
RailsCron的定制参数
- :sleep—执行的间隔频率,默认:1秒
- :db_sleep—访问数据库的间隔频率,默认:1秒
RailsCron的启动与停止
RailsCron通过Rake启动和停止,具体命令如下:
- cron_start—以守护进程(daemon)启动RailsCron
- cron_foreground—以前台启动启动RailsCron
- cron_stop—安全停止
- cron_kill
- cron_graceful—安全重启
- cron_status
以上命令是linux下使用,Windows用户需要使用
ruby script\runner ‘RailsCron.start’
运行和Ctrl-C停止
环境变量的设置:
- RAILSCRON_SUDO—后台进程将以如下指定用户身份运行,默认不使用。
- RAILS_ENV—Default: 默认环境development
注释:该文参考原插件说明的readme和相关文章
分享到:
相关推荐
Cron表达式的每个字段可以是一个具体的值、一个范围、一个列表、一个通配符(*)或者是一个步进值(如“/5”每隔5单位时间)。通配符*代表所有可能的值,例如"*/5 * * * *"表示每5分钟执行一次。步进值可以与范围或...
4. **Delayed Job (DJ)**: DJ 是一个流行的 Rails 插件,用于处理后台任务。它将任务放入数据库队列,然后在后台进程(如 worker)中执行。要使用 DJ,首先需要安装 gem,然后配置数据库连接,最后创建并运行 worker...
Crono-Rails的工作计划程序 Crono是Ruby on Rails的基于时间的后台作业调度程序守护程序(就像Cron一样)。 目的 当前,还没有Ruby Cron for ...它将创建一个配置文件config/cronotab.rb并进行迁移运行迁移: rake
Whenever是一个基于Linux的cron服务的gem,它将Ruby代码转换为cron脚本,从而让cron负责执行周期性任务。在Windows平台上,由于缺少cron服务,whenever无法直接使用。以下是如何使用whenever的步骤: - 首先,通过...
它为Rails的框架提供了一个适配器,使您的应用程序可以将作业作为消息在队列中排队。 Elastic Beanstalk提供了可自动从队列中提取消息并将其转换为HTTP请求的。 这个宝石知道如何处理这些请求。 它带有一个中间件,...
仅在至少运行一个Sidekiq进程时才添加调度作业,但是在运行多个Sidekiq进程或节点的环境中使用Sidekiq-Cron是安全的。 如果您想了解调度的工作原理,请查看 与ActiveJob配合使用(Rails 4.2+) 您不需要Sidekiq ...
例如,如果你想在每天的凌晨1点运行一个任务,你可以在`config/schedule.rb`中写入: ```ruby every 1.day, at: '1:00 am' do command "rake your_task" end ``` 然后运行`whenever --update-crontab`命令,将...
安装将此行添加到您的应用程序的Gemfile中: gem 'dj_cron'然后执行: $ bundle或将其自己安装为: $ gem install dj_cron用法在Rails项目目录中,运行: bundle exec djc-enqueue FooJob BarJob ...FooJob和BarJob...
解析cron表达式并计算给定日期之后的下一次出现 ice_cube -Ruby日期重复库 ISO8601 -Ruby解析器可与ISO8601 dateTimes和持续时间一起使用 ... 使用fugit的项目 arask- “自动RAils任务”使用fugit解析cron字符串 ...
Ruby的作业调度程序(at,cron,in和每个作业)。 它使用线程。 注意:也许您正在寻找的? (特别是如果你使用这是上鲁弗斯调度2.0.24) 快速开始: # quickstart.rb require 'rufus-scheduler' scheduler = ...
或者,直接定时执行一个脚本 `auto_backup.sh`,脚本内容为: /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1 然后,在 `/etc/crontab` 中添加相关任务,定时执行 `auto_backup.sh` 脚本文件。 二、...
该应用程序是一种非常简单的CMS(内容管理系统),可以管理帖子。 除了无聊的功能外,它还具有一些非默认功能。 该项目旨在构建用于生产的精益Docker映像。 因此,它基于官方的Alpine Ruby图像,使用了多阶段构建和...
一个用于显示档案查找辅助工具的Ruby on Rails应用程序,该应用程序使用从ArchivesSpace导入的数据。 用于《 NC州立大学图书馆特别馆藏研究中心馆藏指南》( )。 通过Apache Solr提供了跨查找辅助工具的搜索。 要求...
完成了 Heroku 准备好 Ruby on Rails iDoneThis 克隆。... heroku addons:open scheduler以安排bundle exec cron:prompt和bundle exec cron:digest每天一次 有关可配置变量的列表,请参阅config/settings.yml
此外,Heroku还支持配置环境变量(如数据库连接字符串),使用`heroku config:set`命令,以及运行后台任务(如定时任务)通过Heroku的作业系统(如cron jobs)。对于初学者来说,理解如何在Heroku上部署和管理Rails...
通过以上三个部分的详细介绍,我们可以了解到如何配置GitLab备份目录路径、执行手动备份以及自动化备份,并且在必要时如何进行恢复操作。这些步骤对于维护GitLab系统的稳定性和安全性具有重要意义。
Sidecloq 周期性/定期/计划/ Cron作业扩展 为什么 使用Sidekiq运行定期任务有多种选择,包括 , 以及 。 每个人解决问题的方式略有不同。... 领导者选举确保只有一个流程可以入队,并且如果当前领导者去世,则会
"Laravel开发-support setranmedia autoblog框架支持库"这个标题表明我们正在讨论一个专门为Laravel开发定制的扩展库,这个库由setranmedia创建,用于支持autoblog功能。下面我们将深入探讨Laravel开发、support库...
一个插件,用于使用thinking_sphinx为Rails应用程序安装和管理sphinx。 它处理: 确保安装了狮身人面像 为您生成合理的sphinx.yml 用上帝管理和监视搜索 添加capistrano挂钩以重新启动部署时搜索 (可选)添加...
联欢晚会是一个用于协作研究媒体丰富的教学案例的平台。 安装与设定 您需要在本地安装以下先决条件才能运行Gala: Ruby 2.6.1 Rails v6.0.0.beta3 PostgreSQL> = v9.6.17(对于MacOS,建议将作为一键安装) ...