每天晚上在特定时间运行ruby on rails作业

时间:2017-08-06 12:32:09

标签: ruby-on-rails ruby delayed-job jobs

我有这样的工作:

class LdapSyncJob < ApplicationJob
  queue_as :default
  require 'pp'
  def perform
    users = User.all
    users.each do |user|
      user.update("Do something")
    end
  end
end

我使用延迟工作进行工作处理。 我的问题是如何以及在何处定义我的工作在特定时间每晚运行? 我应该在行动中打电话给我的工作吗?如果是这样我怎么能这样做?

1 个答案:

答案 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