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

Rails 5 scheduler to update database once a day

我是 rails 的新手,想 运行 每天午夜执行一次批处理 file/schedule 任务,检查哪些条目已过期。 table 中的每条记录都有一个 closing_date,在那之后,此类记录必须处于非活动状态。(DB 上的状态 active=false)。所以基本上它会 运行 2 SQL 查询来获取所有记录,然后将另一个字段标记为不活动,因为 outdated.I 正在使用 Rails 5.

我应该如何处理这个-gem(rufus、whatever、clockwork 或任何其他 gem)或只是一些用于 cronjob 的系统工具?我要把我的数据库更改为 Postgre SQL那会有影响吗?任何人都可以分享以获得想法的任何建议或示例代码。

简而言之:您可以使用 whenever Gem 来达到这个目的。

您需要为要写的地方创建一个 rake 任务 SQL。 然后使用 whenever

将其安排为 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

您可以通过 运行ning

检查您的任务是否正确 运行ning
rake my_namespace:task1 

在控制台中。

现在您需要使用 whenever gem.

安排作业
  1. gem 'whenever', :require => falseGemfile.
  2. 运行 bundle install
  3. 运行 wheneverize 终端命令。这将在配置文件夹中创建一个 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'(请参阅 this question.

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