运行 每晚在特定时间 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
我有一份这样的工作:
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