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

Mea*_*ans 2 sqlite ruby-on-rails scheduler scheduled-tasks

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

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

小智 5

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

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


详细说明

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

rails g task my_namespace my_task1 
Run Code Online (Sandbox Code Playgroud)

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

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

end
Run Code Online (Sandbox Code Playgroud)

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

rake my_namespace:task1 
Run Code Online (Sandbox Code Playgroud)

在控制台中。

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

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

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

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