rails/activejob/CHANGELOG.md
2022-08-29 15:34:01 +09:00

3.0 KiB

  • Fix BigDecimal (de)serialization for adapters using JSON.

    Previously, BigDecimal was listed as not needing a serializer. However, when used with an adapter storing the job arguments as JSON, it would get serialized as a simple String, resulting in deserialization also producing a String (instead of a BigDecimal).

    By using a serializer, we ensure the round trip is safe.

    To ensure applications using BigDecimal job arguments are not subject to race conditions during deployment (where a replica running a version of Rails without BigDecimalSerializer fails to deserialize an argument serialized with it), ActiveJob.use_big_decimal_serializer is disabled by default, and can be set to true in a following deployment..

    Sam Bostock

  • Preserve full-precision enqueued_at timestamps for serialized jobs, allowing more accurate reporting of how long a job spent waiting in the queue before it was performed.

    Retains IS08601 format compatibility.

    Jeremy Daer

  • Add --parent option to job generator to specify parent class of job.

    Example:

    bin/rails g job process_payment --parent=payment_job generates:

    class ProcessPaymentJob < PaymentJob
      # ...
    end
    

    Gannon McGibbon

  • Add more detailed description to job generator.

    Gannon McGibbon

  • perform.active_job notification payloads now include :db_runtime, which is the total time (in ms) taken by database queries while performing a job. This value can be used to better understand how a job's time is spent.

    Jonathan Hefner

  • Update ActiveJob::QueueAdapters::QueAdapter to remove deprecation warning.

    Remove a deprecation warning introduced in que 1.2 to prepare for changes in que 2.0 necessary for Ruby 3 compatibility.

    Damir Zekic and Adis Hasovic

  • Add missing bigdecimal require in ActiveJob::Arguments

    Could cause uninitialized constant ActiveJob::Arguments::BigDecimal (NameError) when loading Active Job in isolation.

    Jean Boussier

  • Allow testing discard_on/retry_on ActiveJob::DeserializationError

    Previously in perform_enqueued_jobs, deserialize_arguments_if_needed was called before calling perform_now. When a record no longer exists and is serialized using GlobalID this led to raising an ActiveJob::DeserializationError before reaching perform_now call. This behavior makes difficult testing the job discard_on/retry_on logic.

    Now deserialize_arguments_if_needed call is postponed to when perform_now is called.

    Example:

    class UpdateUserJob < ActiveJob::Base
      discard_on ActiveJob::DeserializationError
    
      def perform(user)
        # ...
      end
    end
    
    # In the test
    User.destroy_all
    assert_nothing_raised do
      perform_enqueued_jobs only: UpdateUserJob
    end
    

    Jacopo Beschi

Please check 7-0-stable for previous changes.