Rails 5调度程序每天更新一次数据库

时间:2016-12-06 11:44:43

标签: ruby-on-rails sqlite scheduled-tasks scheduler

我是rails的新手,希望每天午夜运行一次批处理文件/计划任务,检查哪些条目已过期。表中的每条记录都有一个closing_date,在此之后,这些记录必须处于非活动状态。(DB上的status active = false)。所以基本上它会运行2个SQL查询来获取所有记录,然后将另一个字段标记为对于过时的记录处于非活动状态。我正在使用Rails 5.

我应该如何处理这个宝石(rufus,无论是什么,发条或任何其他宝石)或者只是一些cronjob的系统工具?我会将我的数据库更改为PostgreSQL,这样会产生什么影响?任何建议或示例代码,任何人都可以分享以获得一个想法。

1 个答案:

答案 0 :(得分:3)

简而言之:您可以将whenever Gem用于此目的。

您需要为编写SQL的位置创建rake任务。 然后使用

将其安排为cron作业

详细说明

第一步是创建一个rake任务。您可以使用控制台

执行此操作
rails g task my_namespace my_task1 

这将在my_namespace.rake文件夹中创建一个名为lib/tasks的文件,其初始内容如

namespace :my_namespace do
  desc "TODO"
  task task1: :environment do
    # Your code will go here
  end

end

您可以通过运行

来检查您的任务是否正常运行
rake my_namespace:task1 

在控制台中。

现在您需要使用whenever gem安排作业。

    {li> gem 'whenever', :require => false Gemfile
  1. 运行bundle install
  2. 在终端中运行wheneverize命令。这将在config文件夹中创建一个schedule.rb文件。
  3. 添加以下代码以安排您的佣金任务:

    every 1.day, at: '8:00 pm' do
      rake "my_namespace:task1"
    end
    
  4. 运行此命令:whenever --update-crontab。如果您的环境是开发环境,请使用命令:whenever --update-crontab --set environment='development'(请参阅this question

  5. 运行crontab -l以检查是否已添加cron作业。