`

Rails创建定时任务

阅读更多

 

 

Task & Rexcel

最终生成的报表需要excel格式,我用了Rexcel这个插件,先写下一个task(/lib/task/task.rake)

namespace :reports do
  desc "my report"
  task :my_report => :environment do
     arr = ActiveRecord::Base.connection.execute("#{your sql}").to_a
    workbook = Rexcel::Workbook.new
    worksheet = workbook.add_worksheet("reports")
    worksheet.add_line(["col1", "col2", "col3"])
    worksheet.add_lines(arr)
    Rails.logger.info("===================begin to write excel")
    File.open("#{RAILS_ROOT}/public/uploads/reports/#{month}月报表.xls", "w") do |f|
      f.write(workbook.build)
    end 
  end
end

Crontab & whenever

cron是unix的一个系统工具,用来在后台执行一些定时任务,crontab就是定义这些定时任务的文件

crontab commands

  • crontab -e Edit your crontab file, or create one if it doesn’t already exist.
  • crontab -l Display your crontab file
  • crontab -r Remove your crontab file

whenever

whenever是一个用来生成可读性更好的crontab的gem

config/schedule.rb中写完任务

# 每个月1号凌晨4点执行任务
every '0 4 1 * *' do
  rake "reports:my_report"
end

在控制台直接执行whenver,得到原生的crontab line,放到部署应用的机器上

关于rake task传参

如果想在控制台手动执行task,也许需要传一些参数,写法是这样

desc "模版应用次数统计报表 -- 手动执行,输入月份"
task :my_task_by_params, [:arg1, :arg2] => :environment do |t, args|
  puts args.arg1
  puts args.arg2
  # your code ...
end

控制台执行RAILS_ENV=production rake my_task_by_params[1, 2]

如果用的是zsh的话,这个rake命令可能会出问题,记得用noglob,出处

分享到:
评论

相关推荐

    Rails3 使用rake启动后台任务

    3. **定时任务**: 要定期运行任务,可以结合 cron(Unix/Linux)或 Windows 计划任务。在 Rails 中,可以使用如 Whenever 这样的库来简化这个过程。 4. **Delayed Job (DJ)**: DJ 是一个流行的 Rails 插件,用于...

    rails _sunspot 学习笔记

    除了 Sunspot 外,你还可以考虑使用 Crontab 插件来定时更新索引或执行其他定期任务。这在需要定期处理大量数据的情况下非常有用。 **安装 Crontab 插件**: ```bash gem 'whenever', require: false ``` **配置 ...

    基于Java的Rails3消息队列系统 Sidekiq.zip

    4. **任务调度**:Sidekiq支持定时任务,Java端也需要有相应的定时任务管理机制,如Quartz或Spring的TaskScheduler,来触发和执行预定的任务。 5. **错误处理和重试策略**:在Java中实现Sidekiq时,需要考虑错误...

    Ruby-rufusschedulerRuby作业定时调度程序

    2. **多种调度类型**:支持秒级、分钟级、小时级、天级和月级等多种时间间隔的定时任务。同时,还可以定义一次性任务和基于间隔的重复任务。 3. **事件驱动**:rufus-scheduler基于事件驱动模型,当指定的时间点...

    bhl_rails_solr-源码.rar

    2. **索引优化策略**:源码中可能包含批量索引优化的策略,比如定时任务或者在应用空闲时进行。 3. **Solr字段类型与Rails模型的映射**:理解如何将Rails模型的属性转换为Solr理解的字段类型,以及如何设置字段的...

    my_scheduler:类似于Google的Scheduler与您的Rails和dhtmxScheduler

    它允许开发者在Rails环境中创建、管理和执行定时任务,以实现自动化的工作流程。 【描述】"my_scheduler" 的核心功能在于,它为Rails开发者提供了一个用户友好的界面,可以方便地定义和配置定时任务。这些任务可以...

    list-off:[app]具有身份验证功能的自毁Rails任务管理器

    7. **时间触发器**:如使用后台任务队列(如Sidekiq或Resque)和定时任务,以在指定时间后自动销毁任务。 8. **加密技术**:为了保护敏感任务信息,可能采用了加密算法对数据进行存储和传输。 9. **RESTful API设计*...

    计划任务Cron表达式生成

    "Cron表达式"是Linux系统中计划任务的核心,而Java社区通过`@Scheduled`注解和Quartz库等方式也引入了类似的概念,使得在Java应用中实现定时任务变得非常方便。 "Cron"这个词来源于北欧神话中的时间之神"Cronus",...

    服务器自动化任务解决方案 Huginn.zip

    为了高效地管理网络资源、监控数据变化和执行定时任务,许多企业和开发者开始寻找可靠的自动化工具。其中,Huginn以其强大的功能和灵活的配置脱颖而出,成为了一个备受瞩目的解决方案。本文将深入探讨Huginn的核心...

    Ruby缺少的后台和批处理系统_Ruby_下载.zip

    10. **作业调度**:可以设置定时任务,根据预设的时间间隔或特定时间点自动触发作业。 在实际使用中,你可以通过以下步骤开始使用RocketJob: 1. 添加RocketJob到Gemfile并运行`bundle install`安装。 2. 配置...

    Laravel开发-support

    可能包含的功能有:自动抓取和解析源内容、处理数据(如图片和链接)、实现定时任务调度、提供API接口与其他系统交互、提供自定义配置选项等。开发者可以通过Composer安装并集成到他们的Laravel项目中。 6. **使用...

    schedule-new

    `whenever` gem提供了一个更友好的界面来配置Cron作业,它将Ruby代码转换为Cron表达式,使得在Rails应用中管理定时任务变得更加简单。在Gemfile中添加`whenever`,然后在`config/schedule.rb`中定义任务: ```...

    机器人

    2. **定时任务**:使用Ruby的`Time`类或第三方库来设定定时任务,确保在预定的时间执行某项操作。 3. **任务调度**:可能需要一个任务队列来管理多个待执行的任务,确保它们按顺序或并行地运行。 4. **数据处理**:...

    Ruby-Kuroko2是一个基于web的作业调度器工作流引擎

    在部署和运行Kuroko2时,你需要一个支持Ruby的服务器环境,通常会用到Ruby on Rails框架。Kuroko2可能依赖于一些特定的Ruby gem(库),这些gem在项目配置文件(如Gemfile)中列出,并通过Bundler进行管理。在解压`...

    使用quartz需要的jar包

    这个jar包提供了创建、管理和执行定时任务的基本功能。 2. **依赖库**: Quartz并非一个独立运行的库,它依赖于一些其他的库来完成其功能。例如,`slf4j-api.jar`用于日志记录,`commons-logging.jar`提供通用的...

    Laravel开发-taiga-laravel

    3. **数据同步**:可以定时或实时同步 Laravel 应用的数据到 Taiga,例如任务状态、问题报告等。 4. **自定义视图**:提供预定义的视图模板,方便展示 Taiga 数据在 Laravel 应用中的集成。 5. **事件监听**:通过 ...

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    - Ruby简洁的语法非常适合编写自动化脚本,例如定时任务、文件处理等。 - **数据处理脚本** - 使用Ruby编写数据处理脚本,可以快速处理大量数据并执行复杂的逻辑操作。 **3. 数据分析和科学计算** - **数值处理...

    schedule_cron

    它可以创建一次性、每分钟、每小时、每天或者更复杂的定时任务。使用rufus-scheduler,你可以编写像这样的代码来调度任务: ```ruby require 'rufus/scheduler' scheduler = Rufus::Scheduler.new scheduler....

    Gitlab私有化部署管理

    - **定时任务**: `30 3 * * * /mnt/gitlab/backups/git_backup.sh` (每天凌晨3:30执行一次) - **脚本权限**: 设置为755 **1.2 内网环境** - **地址**: `http://xx.xx.xx.xx` - **备份目录**: `/var/opt/gitlab/...

    Laravel开发-laravel-skeleton .zip

    8. **任务调度**:使用 Crontab 语法定义计划任务,简化了定时任务的管理。 9. **错误和日志**:强大的错误处理和日志记录机制,有助于调试和优化代码。 10. **包开发**:Laravel 的组件化设计和 Composer 支持,...

Global site tag (gtag.js) - Google Analytics