$ cat rails/month/2026-09-01.log
the month in review · September 2026
Herb becomes Rails 8.2 default
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
The Ractor-readiness push runs across Rails internals all month, and ActionText's to_markdown escaping keeps getting patched.
Make some ActionView::Base settings shareable rails/rails
ActionView::Base settings move off class variables to singleton-class accessors so view rendering can run on non-main Ractors, part of the month-long Ractor-readiness push. If you subclass or reopen ActionView::Base to set configuration, check that you are writing through the delegating readers.
Ractorize Active Record schema context rails/rails
SchemaContext attributes are split into a class embedded in Ractor storage, so schema state can change per reactor rather than being shared. That is the groundwork for running Active Record work across Ractors, and it changes how schema context is held internally.
Store the AssetTagHelper settings in singleton class attributes rails/rails
The six AssetTagHelper settings leave class variables for singleton class attributes because non-main Ractors cannot read class variables on Ruby 4.0. The instance writers are removed, so any code reaching in to set those settings directly needs the new readers.
Freeze Active Record time zone related configuration: rails/rails
The two Active Record time zone related configs are frozen to stay Ractor-accessible, and the Railtie mutation was moved because it previously ran after the freeze. Apps that mutate those configs at runtime, rather than in an initializer, will hit the freeze.
Avoid a redundant join in scoped through associations rails/rails
When a has_many :through association's scope joins a table the through chain already joins, the merged scope now drops the duplicate join instead of joining the same table twice. Expect narrower SQL on scoped through associations, without behavior change in the results.
Re-enable PostgreSQL triggers when `disable_referential_integrity` raises rails/rails
On PostgreSQL versions without NOT ENFORCED, disable_referential_integrity ran ALTER TABLE ... DISABLE TRIGGER ALL with no ensure, so a raising block left triggers disabled on every table. The new path re-enables them when the block raises.
v1.3.0 rails/mission_control-jobs
Mission Control for Jobs adds batch support and sorts failed jobs in descending order, the latter flagged as a frequent request. Batches let you enqueue and track a group of jobs from the same dashboard you already use for queue state.
v1.26.0 rails/bootsnap
Bootsnap fixes bootsnap precompile generating a corrupted cache entry when an already cached YAML file was modified without changing its size, and handles top level Coverage being defined without the real stdlib coverage module. If you ship YAML and precompile caches, this is the upgrade that stops the corruption.
$ ls rails/month/ # 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.
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.