rails/activejob/CHANGELOG.md

3.9 KiB

  • While using perform_enqueued_jobs test helper enqueued jobs must be stored for the later check with assert_enqueued_with.

    Dmitry Polushkin

  • ActiveJob::TestCase#perform_enqueued_jobs without a block removes performed jobs from the queue.

    That way the helper can be called multiple times and not perform a job invocation multiple times.

    def test_jobs
      HelloJob.perform_later("rafael")
      perform_enqueued_jobs # only runs with "rafael"
      HelloJob.perform_later("david")
      perform_enqueued_jobs # only runs with "david"
    end
    

    Étienne Barrié

  • ActiveJob::TestCase#perform_enqueued_jobs will no longer perform retries:

    When calling perform_enqueued_jobs without a block, the adapter will now perform jobs that are already in the queue. Jobs that will end up in the queue afterwards won't be performed.

    This change only affects perform_enqueued_jobs when no block is given.

    Edouard Chin

  • Add queue name support to Que adapter.

    Brad Nauta, Wojciech Wnętrzak

  • Don't run after_enqueue and after_perform callbacks if the callback chain is halted.

    class MyJob < ApplicationJob
      before_enqueue { throw(:abort) }
      after_enqueue { # won't enter here anymore }
    end
    

    after_enqueue and after_perform callbacks will no longer run if the callback chain is halted. This behaviour is a breaking change and won't take effect until Rails 6.2. To enable this behaviour in your app right now, you can add in your app's configuration file config.active_job.skip_after_callbacks_if_terminated = true.

    Edouard Chin

  • Fix enqueuing and performing incorrect logging message.

    Jobs will no longer always log "Enqueued MyJob" or "Performed MyJob" when they actually didn't get enqueued/performed.

      class MyJob < ApplicationJob
        before_enqueue { throw(:abort) }
      end
    
      MyJob.perform_later # Will no longer log "Enqueued MyJob" since job wasn't even enqueued through adapter.
    

    A new message will be logged in case a job couldn't be enqueued, either because the callback chain was halted or because an exception happened during enqueing. (i.e. Redis is down when you try to enqueue your job)

    Edouard Chin

  • Add an option to disable logging of the job arguments when enqueuing and executing the job.

    class SensitiveJob < ApplicationJob
      self.log_arguments = false
    
      def perform(my_sensitive_argument)
      end
    end
    

    When dealing with sensitive arguments as password and tokens it is now possible to configure the job to not put the sensitive argument in the logs.

    Rafael Mendonça França

  • Changes in queue_name_prefix of a job no longer affects all other jobs.

    Fixes #37084.

    Lucas Mansur

  • Allow Class and Module instances to be serialized.

    Kevin Deisz

  • Log potential matches in assert_enqueued_with and assert_performed_with.

    Gareth du Plooy

  • Add at argument to the perform_enqueued_jobs test helper.

    John Crepezzi, Eileen Uchitelle

  • assert_enqueued_with and assert_performed_with can now test jobs with relative delay.

    Vlado Cingel

  • Add jitter to ActiveJob::Exceptions.retry_on.

    ActiveJob::Exceptions.retry_on now uses a random amount of jitter in order to prevent the thundering herd effect. Defaults to 15% (represented as 0.15) but overridable via the :jitter option when using retry_on. Jitter is applied when an Integer, ActiveSupport::Duration or :exponentially_longer, is passed to the wait argument in retry_on.

    retry_on(MyError, wait: :exponentially_longer, jitter: 0.30)
    

    Anthony Ross

Please check 6-0-stable for previous changes.