🏄 This week in Rails 🏄: MariaDB, Action Cable, and more!

Hello everyone!

Jon here bringing you This Week in Rails from the sunny surf town of Biarritz, France 🇫🇷☀️

Ready to jump in and catch a few waves of updates?

Grab your surfboard and let’s go!

This Week’s Rails Contributors 🏆

Please share some aloha 🌸 for the 27 daring riders who contributed to Rails (and world happiness) this week, including 4 committers who caught their first wave 😍😎! You can, too! Check out the current issues if you’d like to paddle out, make new friends and join the fun 💙

MariaDB support comes to Rails 5! 🎉

Thanks to Jeremy Daer, Ryuta Kamizono, Vipul A M and Ian Gilfillan, Active Record is now fully compatible with MariaDB ❤️💛💚💜… click on our heroes’ names to open the commits and see what went down behind the scenes!

MariaDB is a community-developed open source fork of MySQL. Notable users include Wikipedia, Facebook, Google and, yes, Basecamp 3! Here is a good Wikipedia article about MariaDB and MySQL history. Game on!

🌊 Improved 🌊

Run Action Cable callbacks through the worker pool

Everybody out of the pool! 🏊 It was getting crowded in the water, but luckily our experienced Baywatch lifeguards Matthew, Sean and Jeremy 🏋 were on hand to, er, pool their efforts to ensure your database connections are managed automatically when Action Cable is involved! Synchronized water ballet, anyone?

Fewer string allocations in number helpers

No Strings are better than NoSQL, right? Ankit noticed that the number_to_delimited and number_to_rounded helper methods were creating duplicate strings. Check out the pull request to see how he improved it using derailed_benchmarks to check object allocations 🍰

Speed up and handle max_time edge cases

Rails has the need for speed 💨 and surfers Blake and Xavier managed a crowd-pleasing acceleration maneuver in AS::FileUpdateChecker using a single loop memoization rather than multiple loops, benchmarked using benchmark-ips. It’s good stuff; see the PR for more! 🍦

Speed up attribute_changed? in ActiveModel::Dirty

Faster than relocating to San Francisco ✈️ (and much more fun), sun-drenched rider Lihan was able to speed up attribute_changed? by setting the default options parameter to nil instead of a hash, and checking the result with benchmark-ips 😎

🌴 Fixed 🌴

Disallow #deliver_later after local message modifications

Lifeguard Jeremy came across a common, hard-to-detect 🐞 in the water: Local message changes weren’t being enqueued with the delivery job when using #deliver_later. This now raises a friendly exception to make sure your message modifications are made in either (a) the mailer method or (b) using a custom Active Job. Nice catch! 🌊

Revert Hash#transform_keys to always return a Hash

While surfing Mongoid’s test suite, an error alerted our champion Emily 🏄🏾 to a change of behavior in ActiveSupport#symbolize_keys: Rails 4.1 returned a Hash but 4.2/5.0 returned self.class. This launched an interesting discussion on the merits of expected behavior versus matching Ruby’s behavior. Have a look! 🍎

🌞 Wrapping Up 🌞

That’s all for This Week on the Beach with Rails™ 🌴. There were many more improvements (and great waves) than we have room to cover here, so don’t hesitate to jump in and check them out yourself… the water’s warm and the locals are friendly! 👣🐾

See you next week! 🍍🍌🍉🍇

This week in Rails: strong ETag validators, Action Cable enhancements and more!

Hello everyone! This is Roque bringing the latest news from Rails. Hope you enjoy, and see y’all at the RailsConf in a month!

This Week’s Rails Contributors

This week 39 people contributed to Rails. We also got 11 first time contributors. Welcome aboard folks and keep it going!

Strong ETag validators

Strong ETag is now available in addition to weak ETag. It implies that the response should be exactly the same and byte by byte identical. Useful when doing things like Range requests within a large video or PDF file.

Action Cable protocol negotiation

Action Cable will gracefully disconnect clients and disable the monitor if the protocol has changed. This allows clients to gradually move to the newest version.


Allow passing record being validated to error message generator

The record being validated is now accessible from the message proc to generate custom error messages like: proc { |record, data| "#{data[:attribute]} failed with value #{record.name}." }

Add non-US format support to number_to_phone

Need to format a non-US phone number? You can now use number_to_phone with the :pattern option as a Regexp.


Fixed duplicated emails issue with Sendmail

There was an issue with Action Mailer when calling Sendmail with the -t argument. Sendmail would scan messages for recipients, and it could result in duplicated emails.

Fixed the String#to_time behaviour to match Ruby’s

Previously, the method returned today’s midnight time when there was no relevant information in the string. Now it returns nil.

Wrapping Up

That’s all for This week in Rails. As always, there are plenty of things we’re not able to cover here, so take a look at the changes yourself.

Until next time!

This week in Rails: new query methods, Action Cable enhancements and more!


Hey everybody! Tim here reporting from Portland, OR on another solid week for the Rails community. As a protest to April Fools’ typical tomfoolery, this edition is coming to you 100% jape-free. No, really!

This Week’s Rails Contributors

This week 29 lovely people contributed to Rails, including 5 for the first time! A big Friday Hug goes out to all of them! Feel free to check out the list of current issues for ideas if you’d like to join them ❤️


Active Record gets a few extra query methods

Ever find yourself writing cumbersome things like User.count.zero?? You can now use the terser User.none?, as well as User.one? and User.empty?, as these three methods just got added.

The default worker pool size for Action Cable just got lowered considerably!

The author of this revision put it best: “Whack it down from 100 to 4”. This will decrease the number of db connections for most, who probably don’t need so many.

Notifications can now hook into Action Cable

Just as you can subscribe to Action Controller’s #process_action, so you can now with ActionCable::Channel::Base#perform_action after this fine addition. Get notified!


Prepared statements to have a cache separate from unprepared statements

This subtle bug was fixed this week, wherein a connection that was established with prepared statements enabled could fail if a query that had been previously run was run again with prepared statements disabled. This was because it was hitting the same cache as the prepared statements-enabled query. Prepared statements now have their own cache, which solves the problem. Hurrah!

rails runner now shows the correct command name when run with Spring

Running rails runner with no arguments or with the --help flag shows you some information on how to use the runner as a shebang line. Unfortunately, if you were using Spring, it would get the path wrong because Spring changes a variable that relates to the command that was run (bin/rails). That just got fixed in this revision!

Using rails restart with Puma now works!

Previously, when issuing rails restart with Puma running, it would fail to bring it up again since Puma was trying to inspect ARGV to decide how to go about it. The fix involved changing Puma to allow its configuration options to be overridden by Rails. Great job!

Wrapping Up

That’s all for This week in Rails. As always, there are plenty of things we’re not able to cover here, so take a look at the changes yourself.

Until next time!

This week in Rails: Cables, Mailers, Floats, and More!

Business Todd here with your weekly briefing of all the goings-on in the Rails organization.

Since our last update, a number of initiatives were undertaken by many of our stakeholders to breed cross-functional synergies between the underlying components of the Rails vertical. Or, if your eyes glazed over at the sight of “cross-functional synergies” or any of the other garbage I just typed out, a bunch of people did some stuff to make Rails better and junk.


I’m running this meeting and I’m already boring myself. Let’s just jump into it, shall we?

This Week’s Rails Contributors

28 beautiful humans helped make Rails better than it was last week. If you’d like to see your name on this list, check out the open issues.


Gracefully Handle Action Cable Client Disconnects

Formerly, Action Cable would raise a connection reset error if a client forcibly disconnected. This change avoids the exception by simply closing the connection if the client disappears.

Avoid Installing New Gems During the Upgrade Process

When running rails app:update, we should avoid adding dependencies on new gems. A previous change adds an option to dev environment config that would require the listen gem to be installed. Instead, the generator now adds the line in question as a comment.

Honor Default MySQL Modes

Active Record’s strict mode has traditionally overridden MySQL’s default modes. However, keeping these modes in place offers better compatibility with other databases. In Rails 5, Active Record will stop overwriting these defaults.

Improvements to Date Inclusion Validator

New in Ruby 2.2+, Range#cover? works with Date ranges. The date inclusion validator has been updated to allow Date ranges to use this method.

Float to Decimal Conversion Madness

To avoid rounding to incorrect values when coercing a Float to a Decimal, the scale needs to be applied before precision. Be sure to read the entire commit message for a summary of how the existing behavior may cause unexpected issues.


Fix reset_session for API Controllers

request.reset_session relies on ActionDispatch::Flash, which is not included in API Controllers. This change moves that requirement to the Flash middleware itself.

Ensure Action Cable is Loaded in Application Generator

This PR fixes an issue where Action Cable would not be loaded properly if the app was generated without Active Record.

Generate ApplicationMailer for Engines

In a followup to one of the fixes from last week’s issue, we’re now ensuring that ApplicationMailer will be correctly generated in Engines.

Prevent Key from Being Created When Checking for Error Inclusion

Calling ActiveModel::Errors#include? with a key that didn’t exist would pollute the errors hash with they specified key and an empty Array as its value. This week, that behavior was corrected.

Wrapping Up

That’s all for This week in Rails. As always, there are plenty of things we’re not able to cover here, so take a look at the changes yourself.

Until next time!

This week in Rails: no-clash thread vars, a way to contribute and more!

Straight from the mail room, it’s this week in Rails!

We made sure to squeeze our lone chimp with a typewriter extremely talented editor Kasper for just a few more keystrokes this week.

The result is not a novel, but it’s pretty damn close to legible.

Let’s check it out!

This week’s Rails contributors

Did you know? Rails is written by people no smarter than you (I know, low bar! 😘). They show up, Google a few things for the common good and submit patches. They even get their name on this here fancy page!

A Rails conference in the Pacific

The pacific Rails conference is rolling, from May 20th to 21st in Taipei, Taiwan. Several editors of this newsletter will be speaking, so we recommend checking it out!

thread_mattr_accessor doesn’t clash with thread-locals

Rails 5’s thread_mattr_accessor wouldn’t expose a variable set at the class level to instances and vice versa, because it generated a key that wasn’t uniform both at the class and instance level. Now it does 😁


Once more, db:migrate creates the test database.

Rails considers the test database a part of the complete dev environment, as such running db:create in development creates the test database as well. You’ll be up, running, and testing in no time.

Document Rails’ logger + formatter interface

Rails’ logger and formatter — ActiveSupport::TaggedLogging — had a habit of saying, “tag, you’re it!”, when figuring out how to glue the pieces together. With new documentation, this rigamarole is easier to suss out.


Break up an Action Pack and Action View circular require

Spinning assigns and assert_template out into its own gem exposed a circular require in Action View and Action Pack. Good news is, adding gem 'rails-controller-testing' to your Gemfile should be hassle-free after this (though if you’re using RSpec it needs a teensy bit more setup).

Generate ApplicationMailer if it’s missing

Rails 5 adds new application wide classes to inherit from, one being ApplicationMailer. New mailers automatically inherit from said class. However, the file for it wasn’t being generated if missing. Rest assured, it now is.

Call for contributors

Improve Rails’ multi database support

Want to give back to Rails, but don’t know where to start? Here’s something to do, straight from a Rails core member. Take a stab at improving multi database support with the suggestions at the link.

Could make a great Google Summer of Code project too 😉

Wrapping Up

That’s all for This week in Rails. As always, there are plenty of things we’re not able to cover here, so take a look at the changes yourself.

Until next time!

[ANN] Rails 4.2.6 and 4.1.15 have been released!

Hi everyone,

I am happy to announce that Rails 4.2.6 and 4.1.15 have been released.

CHANGES since 4.1.14

To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.

CHANGES since 4.2.5

To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.


If you’d like to verify that your gem is the same as the one I’ve uploaded, please use these SHA-1 hashes.

Here are the checksums for 4.1.15:

$ shasum *4.1.15.gem*
a183c8734c2f78447196a7a06c050f19bbbfe3f8  actionmailer-4.1.15.gem
18acc434397ec5a1439d89943a8611197c7b92a4  actionpack-4.1.15.gem
b40e5bf8abb6ccff18891cbf16373b3a29e13f60  actionview-4.1.15.gem
17503cf48905bf6e73439d9aa885ab2afe106e55  activemodel-4.1.15.gem
bb6b6e6a11c12a0bbd02861f7a977da00dc63830  activerecord-4.1.15.gem
4e613383b72ee1ac4085421deda1d691d1adf6d7  activesupport-4.1.15.gem
7d6cb5b79b79a6266950a2bdedacc18848ae28cd  rails-4.1.15.gem
04352395f702172a1feab498b69b77c774ac0cc9  railties-4.1.15.gem

Here are the checksums for 4.2.6:

$ shasum *4.2.6.gem*
fd754430d0bf22f72f2c5d6e312313212ebfa154  actionmailer-4.2.6.gem
ad22f1ba93836658f28a5b1890d7f34bd12d8516  actionpack-4.2.6.gem
385c05851e638be667785d2e9f125e10cf9a1226  actionview-4.2.6.gem
5431905eb16dd2d7ce3842dddc5f748f3d3da73e  activejob-4.2.6.gem
7dc2c0e48ee4124f436c1b0c963e7ca582a5a125  activemodel-4.2.6.gem
61c5eb7485cbb42f7b72e3097df159661e6ec45d  activerecord-4.2.6.gem
43538d9b6d9a40b6da44c03345841d383ea53006  activesupport-4.2.6.gem
ca802d5ecf54f085866c473d71e74c7ddf11410e  rails-4.2.6.gem
f2837b9660a9774f93c196fcf9f0e4769571a2e3  railties-4.2.6.gem

I’d like to thank you all, every contributor who helped with this release.

This week in Rails: stable releases, `Parameters#dig` and moar awesome fixes

Hey there!

This is Washington with the latest news from Rails!

This week’s Rails contributors

Again we start pointing to the 40 people who took some time to improve the framework this week!

Rails 4.2.6 and 4.1.15 have been released

After a round of release candidates here goes the latest stable releases. Hopefully a quite easy upgrade if you’ve been following the latest security patches.

New Stuff

Introduced ActionController::Parameters#dig

Similar to Hash#dig, this easter egg for Ruby 2.3.0 users was introduced this week and should land with Rails 5.


Symmetric job payload across JSON dump/load

One last piece of a non-native JSON data type, aka Ruby symbols, was normalized so that one can make successful run time checks.

Default rendering behavior on respond_to collector

This is done so that actions using respond_to blocks go hand in hand with Rails 5 default :no_content response for missing templates.

Prevent Marshal.load from looping infinitely

Improved compatibility for marshalled objects between Rails versions, e.g. Rails 4.0.x and 4.2.x

Execute default_scope within the scope of subclass

Give a proper context to queries involving a default_scope triggered from a subclass of ActiveRecord#Base.abstract_class.

Wrapping Up

That’s all for This week in Rails. As always, there are plenty of things we’re not able to cover here, so take a look at the changes yourself.

Until next time!

This week in Rails: Rails 4.2.6.rc1 and 4.1.15.rc1, AS::Executor and AS::Reloader APIs and more!

Hi All!

This is Vipul bringing you the latest news from Rails!

This week’s Rails contributors

This week 48 contributors helped to move Rails forward! Want to be one of them? Look at the issues list and make a contribution!

Rails 4.2.6.rc1 and 4.1.15.rc1 have been released

Rails 4.2.6.rc1 and 4.1.15.rc1 have been released! If no regressions are found expect the final release around March 4, 2016.

Publish AS::Executor and AS::Reloader APIs

These both allow external code to run blocks of user code to do “work” at a similar unit size to a web request without needing to get intimate with Action Dispatch.

This change is intended to allow interested callers (Sidekiq, Action Cable), to just do:

Rails.application.reloader.wrap do
  # run some user code

and Rails will take care of the interlock, code reloading, returning Active Record connections to the pool, and anything else that might be relevant. Exciting, if you have ever been stung by concurrent processing in jobs, etc.

New Stuff

Rails now defaults to Puma 3

With related changes from Puma, Puma 3.0 and up introduced compatibility to read from config/puma.rb when booting from the command $ rails server. Rails now depends on Puma 3.0, so that support for config/puma.rb comes out of the box.

Add exclude option to SSL middleware

The force_ssl option redirects each request to HTTPS. This change now allows redirection to be constrained to only whitelisted requests with exclude:

config.ssl_options = { redirect: { exclude: -> request { request.path !~ /healthcheck/ } } }


Generate config/spring.rb in new applications

This change makes the application generator create a new file config/spring.rb, which tells Spring to watch additional common files, for example .ruby-version. This file can then be edited to suit each application.

Added log “Rendering …”, when starting to render a template

This change added log “Rendering …”, when starting to render a template, to log that we have started to render something, at the very beginning.

This helps to easily identify queries called from controller vs views.


Deprecate :controller and :action path parameters in routes

Allowing :controller and :action values to be specified via the path in config/routes.rb has been an underlying cause of a number of issues in Rails that have resulted in security releases. In light of this it’s better that controllers and actions are explicitly whitelisted rather than trying to blacklist or sanitize bad values. This change deprecates passing these options in routes.

Deprecate {insert|update|delete}_sql in DatabaseStatements

This change deprecates {insert|update|delete}_sql in ActiveRecord::ConnectionAdapters::DatabaseStatements in favor of {insert|update|delete} public methods. Originally, {insert|update|delete}_sql were protected methods, and were not intended for external use.

Deprecate Module.local_constants

Module.local_constants has now been deprecated. After Ruby 1.9 (and since Rails 5 supports Ruby 2.2+), we can easily get the constants that have been defined locally by Module.constants(false). Hence, Module.local_constants is no more necessary.

Wrapping Up

That’s all for This week in Rails. As always, there are plenty of things we’re not able to cover here, so take a look at the changes yourself.

Until next time!

[ANN] Rails 4.2.6.rc1 and 4.1.15.rc1 have been released!

Hi everyone,

I am happy to announce that Rails 4.2.6.rc1 and 4.1.15.rc1 have been released.

If no regressions are found expect the final release this Friday, on March 4, 2016. If you find one, please open an issue on GitHub and mention me (@rafaelfranca) on it, so that we can fix it before the final release.

CHANGES since 4.1.14

To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.

CHANGES since 4.2.5

To view the changes for each gem, please read the changelogs on GitHub:

Full listing

To see the full list of changes, check out all the commits on GitHub.


If you’d like to verify that your gem is the same as the one I’ve uploaded, please use these SHA-1 hashes.

Here are the checksums for 4.1.15.rc1:

$ shasum *4.1.15.rc1.gem*
844351646e7ef5c93b3d21eb14a3d4da0c4bd92d  actionmailer-4.1.15.rc1.gem
1ed87a6847f2f4935f0a16ffa760716f0dc3f2d2  actionpack-4.1.15.rc1.gem
343b96bfe70ebde865fc4c809978cb060a0738c4  actionview-4.1.15.rc1.gem
cc913686a9f8462015d82ea827ddc60431af0db8  activemodel-4.1.15.rc1.gem
f1ff76eb16ba627b7202b2fecaa4219228d14034  activerecord-4.1.15.rc1.gem
2e00ba29b066afe23c152c96becef01fcee3cb10  activesupport-4.1.15.rc1.gem
67a534317cb8446525b644a7abf22bd09273264a  rails-4.1.15.rc1.gem
91b4ec78e9cfcee55e8d92760b6a628ccd20a2d4  railties-4.1.15.rc1.gem

Here are the checksums for 4.2.6.rc1:

$ shasum *4.2.6.rc1.gem*
09ef4800e26fd97d3cc64d1c53ae72bc16e79fd2  actionmailer-4.2.6.rc1.gem
1f41705eec68218ea291d7cdfa233c50c1172524  actionpack-4.2.6.rc1.gem
3cbf38b5021dbb9e587e003ad1782084e323ec35  actionview-4.2.6.rc1.gem
fea55eddff554d1995868b9891e111b683bbf70c  activejob-4.2.6.rc1.gem
46d87e81f73410631554d34e0548347955a6ced4  activemodel-4.2.6.rc1.gem
9496ed951ff242d9ac0a68643877b3b213d1147a  activerecord-4.2.6.rc1.gem
07ea5df02904eed063dd5093b5a7c6f39b3e70ae  activesupport-4.2.6.rc1.gem
3c3194bc02f22e7eac12d982208418d88c0d7a70  rails-4.2.6.rc1.gem
fc855160f5d04e3997d5a09a24027d9e330959b6  railties-4.2.6.rc1.gem

I’d like to thank you all, every contributor who helped with this release.

Rails, and have been released!

Hello everyone and happy Monday!

Rails,, and have been released! These contain the following important security fixes, and it is recommended that users upgrade as soon as possible:

These releases also contains bug fixes for the previous security releases. The released versions can be found in the usual locations, and you can find a list of changes on GitHub:

We’ve done our best to minimize any impact to your applications, but if you run in to any issues, please file a ticket and we’ll do our best to help!

Again, as always, if you run in to any bugs, please file them on the Rails issue tracker which is located here. If you run in to security issues, please follow the reporting process which can be found here.

Here are checksums for the released gems:

$ shasum **
6d63003ef278381e2155daff9d88c0e3f9b4772f  actionmailer-
d4c345a50c1ca34877c262515c803f7e3c2b1db0  actionpack-
e6046e359ef996d08ceebf5b827286737666c848  actionview-
6b2e3059fd620c84f039a9882bf4ef9199fab3c0  activejob-
84af62e888830fd6616cc984bc06da3f87ef12b5  activemodel-
9e22d1ac610a7f63a6cc55af98701cedecf760b2  activerecord-
c8781d9fff8e410987ac5d2a5483fdca2b0b6c15  activesupport-
0a0c4b44a6a40680deffd7abe6fe1ad4c4adcd77  rails-
5614cd03b5912f9cf48fa41c81fff9145f472507  railties-
$ shasum **
d15f2f70b1539d44a2dab6864f550238ef0ae3d1  actionmailer-
04bb0456048863f6391f0f5996a2b01c8a9c1e8b  actionpack-
57a54f23c418b39979a2745bb3db2de67a6d02c9  actionview-
54e553172130d32962e1ff6fe8e19fd71b552994  activemodel-
45ee0e48ad0eb17ef36bd8816439f256cbe0b51c  activerecord-
957a341b6ee5970d4b6e36b108de05ead0ea9762  activesupport-
4d8842abe184b0113032d6643b9d4639bb6e276b  rails-
c4b3a0e130117b70524d3f52a292518a8a237480  railties-
$ shasum **
d5fa20cbddd37cbfd4a665b3d37ad2d5f47f1394  actionmailer-
127a227365cdc1195fb309ab037f25ab276dbc87  actionpack-
c754858b10ef01b071eafca831be2dba2ebbcc71  activemodel-
417f1b087f7166083b78c5cebfb911cffe551c13  activerecord-
859861ec97dcb15dbaef38555995b2c1490928c9  activeresource-
7383b11b265cdd642c55aee5e15f0f87a5a77505  activesupport-
e2b06adbd0df0ccd09b7e5d48024dc076ef38884  rails-
f358f2b37f5f439ef9971d2aba1d96258e9c25f9  railties-