This Week in Rails

January 6, 2023

First edition of 2023! πŸ₯‚

Long time no see! ζ–°εΉ΄ζ˜Žγ‘γΎγ—γ¦γŠγ‚γ§γ¨γ†γ”γ–γ„γΎγ™οΌZzak here to bring you the first This Week in Rails of.. *almost writes 2022*. 🀣

Spotlight
I want to try something different, there has been one particular person that I feel deserves a Shout Out: Akira Matsuda. He has contributed 40 commits since the last episode..! His focus has been on incremental Rails performance optimizations. I've asked him to share how he's finding all of these bugs, and he's promised some significant gains in end-to-end benchmarks! πŸ™ In return, he has asked me as the Chief Organizer of RubyKaigi to remind you all that their CFP is open until the end of this month, so be sure to submit if you'd like to give a talk this year in Matsumoto, Japan!

Use Karma as the test runner for UJS
While this isn't really user-facing, it is a huge step toward us being able to fully support Rack 3 in Rails.

Use Puma worker count equal to processor count in production
This only affects newly generated Rails apps, but sets Puma's config to equal the total number of physical processors by default. You can always change this to fit your needs.

Raise error on missing only unless for controller callbacks
When you specify a filter for a callback in your controller, we can now raise an exception if that action doesn't exist. While this behavior will default to false, it will be enabled on newly generated Rails apps.

Bump required_rubygems_version to 3.3.13 or higher
This was necessary in order to support pre-release Ruby versions in the Gemfile template for newly generated Rails apps. However, due to it being such a huge jump please let us know if you notice anything weird!

Able to match exception messages to assert_raises assertions
While this was initially requested upstream to minitest, it was rejected. Luckily we are able to provide this feature to Rails test assertions from Active Support. Although, I'm definitely an avid `assert_nothing_raised` user 🀣.

Store correct environment in internal_metadata when running rails db:prepare
This fixes a bug where we lost track of the environment between setting up the database for Rails. Thanks to Junichi Ito for reporting this bug!

Only use HostAuthorization middleware if config.hosts is used
This PR removes the middleware stack from every request unless you've configured your app for a particular host.

Use precompute optimization for Rails.env.local?
Another small optimization this time for the recently added Rails.env.local? method. This ensures it will meet the same performance as the other predefined environment predicates, since they return a precomputed instance variable. Now you don't have to care about calling this method in production, as it's almost 40% faster!

There were 29 contributors to Rails this week. You can browse all the changes here.

Until next time!