ActiveJob does not execute the job asynchronously

94 views Asked by At

I am trying to implement an API endpoint that would queue a request and return immediately.

I am using the gem https://rubygems.org/gems/activejob/versions/5.2.0 (I am on an old version for historical reasons).

I have defined a job that looks something like:

class Service::ExportBooks::Job < ActiveJob::Base

  def perform
    ## ... Do the job
  rescue StandardError
    binding.pry
    raise
  end

end

In the controller, I am calling:

Service::ExportBooks::Job.perform_later

The job gets called synchronously and the controller gets even any errors raised by the job.

I've also tried other options such as:

job = Service::ExportBooks::Job.new
job.enqueue(wait: 5.seconds)

but it does the same, the job is not enqueued, is immediately executed.

UPDATE: It looks like the method Resque.inline? returns true and so the execution is inline and not async. How can I make sure that it's async? I tried to set Resque.inline = false manually and the job was queued but it wasn't executed...

I have started a worker using the command:

 QUEUE=* PIDFILE=./tmp/resque.pid bundle exec rake environment resque:work
1

There are 1 answers

2
mscccc On

Two things to do here.

  1. Make sure Resque.inline = false.
  2. Start up the resque workers in another process. See here.

This will get the job enqueued and run on the worker process.