我是rails的新手,希望每天午夜运行一次批处理文件/计划任务,检查哪些条目已过期。表中的每条记录都有一个closing_date,在此之后,这些记录必须处于非活动状态。(DB上的status active = false)。所以基本上它会运行2个SQL查询来获取所有记录,然后将另一个字段标记为对于过时的记录处于非活动状态。我正在使用Rails 5.
我应该如何处理这个宝石(rufus,无论是什么,发条或任何其他宝石)或者只是一些cronjob的系统工具?我会将我的数据库更改为PostgreSQL,这样会产生什么影响?任何建议或示例代码,任何人都可以分享以获得一个想法。
答案 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安排作业。
gem 'whenever', :require => false
Gemfile
。
bundle install
wheneverize
命令。这将在config文件夹中创建一个schedule.rb
文件。添加以下代码以安排您的佣金任务:
every 1.day, at: '8:00 pm' do
rake "my_namespace:task1"
end
运行此命令:whenever --update-crontab
。如果您的环境是开发环境,请使用命令:whenever --update-crontab --set environment='development'
(请参阅this question。
crontab -l
以检查是否已添加cron作业。