RepoJournal

$ cat rails/week/2026-10-12.log

Rails

Rails

the week in review · Oct 12 – Oct 18, 2026

Ractor-ready Active Record and Active Job land in Rails

By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology

♥

A week of fixes repair what ractorize! broke: job serializers, rescue_from, deprecation warnings, plus a read-only attribute set to recover the cache's speed.

194 commits 85 PRs merged 7 briefings covered

all rails reviews →

Add read-only attributes and use it instead of building a cache rails/rails

by tenderlove

Removing the builder cache for Ractor safety cost attribute-read performance; this rebase of an earlier attempt adds a read-only attribute set that can be shared instead of rebuilt. It is the performance half of the Ractor work, not a separate optimization.

Make Active Job argument serialization work in non-main Ractors rails/rails

by yaroslav-shopify

Serializing a Time, Duration, Symbol, or anything routed through ActiveJob::Serializers raised Ractor::IsolationError in non-main Ractors after ractorize!, and so did serializing a plain Hash. Those paths now work; this is a prerequisite for running job classes outside the main Ractor at all.

Make Active Job's exception handlers work in non-main Ractors rails/rails

by yaroslav-shopify

rescue_from, retry_on, and discard_on failed in non-main Ractors because exception handlers and after_discard_procs could not cross the isolation boundary. Jobs that raise there now follow the same error handling as jobs on the main Ractor.

Make deprecation warnings work in non-main Ractors rails/rails

by yaroslav-shopify

The app's deprecators are frozen by ractorize!, so any deprecation warning or silence call from a job Ractor raised on Concurrent::ThreadLocalVar state. Deprecations now reach their configured behavior from any Ractor.

Short-circuit route matching for static paths rails/rails

by amatsuda

Journey walked the GTG simulator, ran the pattern regexp, and extracted params for requests like GET /posts that the method and path alone could identify. Static paths now short-circuit that work, and the motivation is CPU rather than allocation.

Fix query constraints on abstract classes rails/rails

by Americo Duarte

Since the query constraints change, reading query_constraints_list loads the schema, and an abstract class with explicit query_constraints has no table to load, so it raised TableNotSpecified. That broke associations declared on such classes; they load again.

Fix disable_joins through associations with a composite owner foreign key rails/rails

by Federico Carrocera

DisableJoinsAssociationScope read the owner's key with a single read_attribute call, which returns nil when the first hop's foreign key is composite, so the association failed to load. Composite-key owners and disable_joins together now resolve the key correctly.

Skip GIDs with a mismatching model_id in Locator.locate_many rails/globalid

by afurm

A GID whose id count doesn't match the model's primary key, like gid://app/Person/1/2, raised NoMethodError and took the whole locate_many batch with it. Mismatched GIDs are now skipped, so one malformed record in a queue payload no longer aborts the rest.

$ ls rails/week/ # the briefings behind this review

Keep up with Rails in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

or

fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.

Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.

all rails reviews →