【问题标题】:Run a ruby on rails job every night at a specific time每晚在特定时间运行 ruby​​ on rails 作业
【发布时间】:2017-08-06 12:32:09
【问题描述】:

我有这样的工作:

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

我使用延迟作业进行作业处理。 我的问题是如何以及在哪里定义我每天晚上在特定时间运行的工作? 我应该把我的工作称为行动吗?如果是这样,我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby delayed-job jobs


    【解决方案1】:

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

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

    【讨论】:

    • 你的意思是在我的 schedule.rb 中有这样的事情((每 1.hours 做一次 LdapSyncJob.perform() end ))但它没有用。
    • 这很好用,但我使用了更简单的 crono gem
    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 2023-04-09
    • 2019-07-10
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多