The Wire · Showcase
RAILS TACKLES RACTOR SAFETY ACROSS ACTIVE RECORD, NOTIFICATIONS, AND STORAGE
By RepoJournal · Filed · About Rails
Rails is shipping a wave of Ractor compatibility fixes that unlock concurrent execution in core frameworks while fixing a cache invalidation bug that's been silently nuking performance.
The biggest push lands in Active Record, where instance variables now freeze properly for non-main Ractor access [2], and Active Support Notifications finally works inside Ractors by making the subscriber cache thread-safe [3]. These aren't optional refinements. They're the foundation for shipping concurrent code without hitting runtime walls. Meanwhile, Bootsnap gets a critical fix that stops invalidating the entire compile cache whenever YJIT toggles at runtime [1], a silent performance killer for anyone mixing YJIT-enabled and disabled processes. On storage, Active Storage now lets you swap in a custom class for variant processing [4], matching the extensibility pattern already available for analyzers and previewers. Rails also restored the public `loaded` method on RoutesReloader [6], which was accidentally removed but is part of the published API. ERB template configuration now flows through ActionView::Base [5] instead of forcing direct class manipulation.
One email a day. Unsubscribe in one click.
Keep up with Rails in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Review and test Ractor compatibility fixes in your Active Record models and background jobs rails/rails [plan]
- → Update Bootsnap if you're running YJIT in production to restore cache stability rails/bootsnap [plan]
- → Audit RoutesReloader usage if you call the `loaded` method directly rails/rails [monitor]
References
- [1] Ignore YJIT status in the compile cache key rails/bootsnap
- [2] Active Record ivar ractor safety ↗ rails/rails
- [3] Ractor compatible Active Support Notifications ↗ rails/rails
- [4] Allow `config.active_storage.variant_processor` to be set to a class ↗ rails/rails
- [5] Allow to configure ERB options through `ActionView::Base` ↗ rails/rails
- [6] Add back `loaded` to RoutesReloader rails/rails