我有这样的工作:
class LdapSyncJob < ApplicationJob
queue_as :default
require 'pp'
def perform
users = User.all
users.each do |user|
user.update("Do something")
end
end
end
我使用延迟工作进行工作处理。 我的问题是如何以及在何处定义我的工作在特定时间每晚运行? 我应该在行动中打电话给我的工作吗?如果是这样我怎么能这样做?
答案 0 :(得分:1)
延迟作业主要用于处理队列和后台的任务。它通常不适合安排任务。
对于您的用例,您应该查看whenever一个ruby gem,它与cron作业一起使用以重复计划任务。
我建议您将逻辑或方法调用LdapSyncJob.perform()
移动到rake任务。
在config / schedule.rb中,你可以这样做
ENV['RAILS_ENV'] = "#{@pre_set_variables[:environment]}"
env :PATH, ENV['PATH']
require File.expand_path(File.dirname(__FILE__) + "/environment")
set :output, "/logs/cron_log_#{ENV['RAILS_ENV']}.log"
every 1.day, :at => '02:30 am' do
command "cd #{Rails.root}/lib/tasks && rake task_calls_peform_code"
end
注意:不要忘记使用所有命令更新并重新启动crontab。
whenever --update-crontab app --set 'environment=production' #update crontab
service crond restart #restart crontab