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

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

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

简而言之:您可以随时使用Gem用于此目的。

您需要为编写SQL的位置创建rake任务。 然后使用随时将其安排为cron作业


详细解释

第一步是创建一个rake任务。 您可以使用控制台执行此操作

rails g task my_namespace my_task1 

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

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

您可以通过运行检查任务是否正常运行

 rake my_namespace:task1 

在控制台中。

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

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

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

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