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.
安排作业
gem 'whenever', :require => false
在 Gemfile
.
- 运行
bundle install
- 运行
wheneverize
终端命令。这将在配置文件夹中创建一个 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作业
我是 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
检查您的任务是否正确 运行ningrake my_namespace:task1
在控制台中。
现在您需要使用 whenever
gem.
gem 'whenever', :require => false
在Gemfile
.- 运行
bundle install
- 运行
wheneverize
终端命令。这将在配置文件夹中创建一个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作业