代码之家  ›  专栏  ›  技术社区  ›  Afsanefda

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

  •  1
  • Afsanefda  · 技术社区  · 8 年前

    我有一份这样的工作:

    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 回复  |  直到 8 年前
        1
  •  1
  •   Satishakumar Awati    8 年前

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

    对于您的用例,您应该查看 whenever

    我建议您移动逻辑或方法调用 LdapSyncJob.perform() 耙任务。

    在配置/计划中。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
    

    注意:不要忘记使用ALBEN命令更新和重新启动crontab。

    whenever --update-crontab app --set 'environment=production' #update crontab
    service crond restart #restart crontab