2017-08-06 45 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寶石更容易 –