Rails 5 调度程序每天更新一次数据库
Posted
技术标签:
【中文标题】Rails 5 调度程序每天更新一次数据库【英文标题】:Rails 5 scheduler to update database once a day 【发布时间】:2017-04-21 01:06:11 【问题描述】:我是 Rails 新手,想每天在午夜运行一次批处理文件/计划任务,检查哪些条目已过期。表中的每条记录都有一个关闭日期,在此之后,此类记录必须处于非活动状态。(DB 上的状态活动 = false)。所以基本上它会运行 2 个 SQL 查询来获取所有记录,然后将另一个字段标记为不活动的记录已过时。我正在使用 Rails 5。
我应该如何处理这个-gem(rufus、whatever、clockwork 或任何其他 gem)或只是一些用于 cronjob 的系统工具?我要将我的数据库更改为 PostgreSQL,这会影响吗?任何人都可以分享任何建议或示例代码以获得想法。
【问题讨论】:
【参考方案1】:简而言之:您可以为此目的使用whenever 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 来安排作业。
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'
(参见this question。
crontab -l
检查是否添加了cron作业。
【讨论】:
如果您需要详细说明,请告诉我 好的,谢谢。因为文档只提供了一个概述,但我没有找到一个相关的例子来描述 SQL 命令将如何被写入 rake 命令......或批处理文件中的两个命令,然后与 runner 一起运行. 我已经更新了答案。如果您仍然面临问题,请告诉我以上是关于Rails 5 调度程序每天更新一次数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何编写 Rake 任务以将数据导入 Rails 应用程序?