rails: ActiveJob not returning true job_id
ActiveJob does not return provider’s job_id but uuid instead.
I use Que
which stores an incremental id for each job (as a numeric value) in database. When executing MyJob.perform_later(MyRecord.first)
the returning job_id
is not the one from the database but ActiveJob’s unique value instead. The job_id
should be the one from the database in this case.
Ref: https://github.com/chanks/que/issues/84
I mad a workaround for now:
# config/initializers/active_job_fix.rb
class ActiveJob::Base
def enqueue(options={})
self.scheduled_at = options[:wait].seconds.from_now.to_f if options[:wait]
self.scheduled_at = options[:wait_until].to_f if options[:wait_until]
self.queue_name = self.class.queue_name_from_part(options[:queue]) if options[:queue]
# hide this to set job_id before logger picks it (I would change ActiveJob::Logger before_enqueue to after_enqueue)
# run_callbacks :enqueue do
if self.scheduled_at
j = self.class.queue_adapter.enqueue_at self, self.scheduled_at
else
j = self.class.queue_adapter.enqueue self
end
self.job_id = j.attrs["job_id"] || j.attrs["id"] # this should be set inside each adapter
# end
self
end
end
About this issue
- Original URL
- State: closed
- Created 9 years ago
- Comments: 23 (23 by maintainers)
Links to this issue
Commits related to this issue
- Let Sidekiq set provider_job_id When a job is added to Sidekiq by ActiveJob, make sure we still can get the original job_id provider by Sidekiq. We do this by adding the sidekiq jid to provider_job_i... — committed to jvanbaarsen/rails by jvanbaarsen 9 years ago
- Let Sidekiq set provider_job_id When a job is added to Sidekiq by ActiveJob, make sure we still can get the original job_id provider by Sidekiq. We do this by adding the sidekiq jid to provider_job_i... — committed to jvanbaarsen/rails by jvanbaarsen 9 years ago
Just put in a PR for DelayedJob https://github.com/rails/rails/pull/19910