运行 每晚在特定时间 ruby rails 工作

Run a ruby on rails job every night at a specific time

我有一份这样的工作:

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

并且我使用延迟作业来处理作业。 我的问题是如何以及在何处将我的工作定义为每晚特定时间 运行? 我是否应该在行动中调用我的工作?如果可以,我该怎么做?

延迟作业主要用于处理队列和后台任务。它通常不适合用于安排任务。

对于您的用例,您应该查看 whenever a 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