【问题标题】:Rails 4 - Delayed Job - Is it possible to know the Job id in the perform method?Rails 4 - 延迟作业 - 是否可以在 perform 方法中知道作业 ID?
【发布时间】:2016-06-24 10:00:25
【问题描述】:

perform方法里面,我想知道当前job的ID是什么。

例如,enqueuesuccessfailureerror 方法提供了 job 参数:

def enqueue(job)
  puts job.id
end

有可能吗?

【问题讨论】:

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


    【解决方案1】:

    我假设您使用 sidekiq 作为后端。在这种情况下,您可以执行以下操作:

    def perform(*args)
      logger.info self.job_id
      # Do something later
    end
    

    这是日志输出

    [ActiveJob] [RequestHandlerJob] [e9923650-cd02-40d1-937d-859852e92c61] e9923650-cd02-40d1-937d-859852e92c61
    

    更新

    抱歉,错过了。

    我在SO post找到了解决方案

    # config/initializers/delayed_job.rb
    Delayed::Worker.logger = Logger.new(File.join(Rails.root, 'log', 'dj.log'))
    
    
    class RequestHandlerJob < ActiveJob::Base
      queue_as :default
    
      def perform(user_id)
        u = User.find(user_id)
        Delayed::Worker.logger.info self.job_id
        # Do something later
      end
    end
    
    
    [retgoat@iMac-Roman ~/workspace/tapp/log]$ tail -f dj.log
    I, [2016-06-24T07:58:32.329471 #23874]  INFO -- : 2016-06-24T07:58:32+0600: [Worker(host:iMac-Roman.local pid:23874)] Starting job worker
    I, [2016-06-24T07:58:42.404522 #23874]  INFO -- : 2016-06-24T07:58:42+0600: [Worker(host:iMac-Roman.local pid:23874)] Job ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper (id=7) RUNNING
    I, [2016-06-24T07:58:42.448858 #23874]  INFO -- : 5f267272-8826-491d-b7d5-82a200e1a6b6
    I, [2016-06-24T07:58:42.451204 #23874]  INFO -- : 2016-06-24T07:58:42+0600: [Worker(host:iMac-Roman.local pid:23874)] Job ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper (id=7) COMPLETED after 0.0466
    I, [2016-06-24T07:58:42.452007 #23874]  INFO -- : 2016-06-24T07:58:42+0600: [Worker(host:iMac-Roman.local pid:23874)] 1 jobs processed at 15.9642 j/s, 0 failed
    

    这里是 job_id 5f267272-8826-491d-b7d5-82a200e1a6b6。希望这会有所帮助。

    【讨论】:

    • 我不确定它是否仍然适用,因为我正在使用 Rails 4.1.8 和 github.com/collectiveidea/delayed_job 的延迟作业 gem
    • 我添加了delayed_job示例。
    • 我想我不能使用 ActiveJob::Base,因为我在 rails 4.1.8(不是 4.2)。如果我错了,请纠正我。
    • 能否请您发布我们正在讨论的代码?一般来说,对于delayed_job 有相同的方法。您需要在初始化程序中定义记录器,然后您可以在其中找到作业ID。
    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 2013-05-01
    • 2012-04-20
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    相关资源
    最近更新 更多