kdd*_*isz 13 ruby-on-rails delayed-job ruby-on-rails-4 rails-activejob
知道如何Delayed::Job从ActiveJob入队获取id吗?当我排队一个工作时,我得到一个ActiveJob::Base带有a 的实例@job_id,但该工作ID似乎是ActiveJob的内部.到目前为止,我最好的猜测就是走下最近创建的工作:
active_job_id = GenerateReportJob.perform_later(self.id).job_id
delayed_job = Delayed::Job.order(id: :desc).limit(5).detect do |job|
YAML.load(job.handler).job_data['job_id'] == active_job_id
end
Run Code Online (Sandbox Code Playgroud)
但这似乎是各种各样的hacky.有点惊讶的ActiveJob没有返回ID Delayed::Job,特别是因为这是在作业入队时显式返回的内容.
==编辑
看起来我不是唯一一个(https://github.com/rails/rails/issues/18821)
kdd*_*isz 11
如果有人在将来发现这个:Rails刚刚接受了一个补丁,允许你从Rails 5中的provider_job_id获取这个id.你可以使用像这样的补丁来使用它
ActiveJob::QueueAdapters::DelayedJobAdapter.singleton_class.prepend(Module.new do
def enqueue(job)
provider_job = super
job.provider_job_id = provider_job.id
provider_job
end
def enqueue_at(job, timestamp)
provider_job = super
job.provider_job_id = provider_job.id
provider_job
end
end)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5308 次 |
| 最近记录: |