2017-08-06 43 views
1

运行在轨道上工作红宝石每天晚上我有一个这样的工作:在特定的时间

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

延迟作业主要用于处理队列和后台任务。这通常不是调度任务的首选。

对于您的使用案例,您应该查看whenever a ruby​​ gem,它可以与cron作业一起重复计划任务。

我建议你将逻辑或方法调用LdapSyncJob.perform()移动到搜索任务。

在配置/ 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 
+1

你的意思是这样的一些东西在我schedule.rb((每1.hours做 LdapSyncJob.perform()结束)),但没有奏效。 –

+0

我已经更新了答案,希望它对你有所帮助。 –

+1

这工作正常,但我用crono宝石更容易 –