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来安排作业。
-
Gemfile
gem 'whenever', :require => false
在Gemfile
。 - 运行
bundle install
- 在终端中运行
wheneverize
命令。 这将在config文件夹中创建schedule.rb
文件。 -
添加以下代码以安排您的rake任务:
every 1.day, at: '8:00 pm' do rake "my_namespace:task1" end
-
运行此命令:
whenever --update-crontab
。 如果您的环境是开发,请使用命令:whenever --update-crontab --set environment='development'
(请参阅此问题 。 - 运行
crontab -l
以检查是否已添加cron作业。