Active Record bug fixes, faster Date#advance, and more!

Hello everyone! This is Eugene, with a selection of interesting improvements to Rails merged in the past week.

Don’t load app environment when editing credentials

Support for per-environment credentials is coming in Rails 6.0, but adding a new environment wasn’t always easy: if your application accessed credentials during boot, the credentials:edit command would fail to run, which would in turn prevent you from adding the missing credentials. Oops!

All queries should return correct results even if they include large numbers

When prepared statements are enabled, querying an integer column with an out-of-range value causes an error in the underlying database driver. To work around this issue, Active Record used to refuse to run the query and always return a negative result, e.g. ActiveRecord::RecordNotFound.

This approach worked for simple queries, but gave incorrect results for more complex ones. Out-of-range values are now converted to “impossible” predicates instead (e.g. WHERE 1=0), which allows the query to run without an error while still producing the correct result.

Speaking of large numbers: this pull request, opened 18 months ago, was number 30,000 on the Rails repository. 🎈

Fix year value when casting a multi-parameter time hash

Values stored in TIME columns in the database are mapped to Time objects in Ruby. The latter includes date parts, where the former doesn’t; to deal with this discrepancy, a default date of January 1st, 2000 is always assigned.

When a multi-parameter time value—as generated by the time_select helper—was assigned to an attribute, its year would be set to 1970 instead, producing a different result depending on where the value came from.

With this fix, time attributes have fully joined us in the 21st century. 🖖

Faster and more memory-efficient Date#advance

This method was copying its options hash unnecessarily. Now that it doesn’t, it’s both faster and allocates less memory.

28 people contributed to Rails since our last issue; you can see the full list of changes here.

Until next week!

Rails 6.0.0 beta1, and more

Daniel here, writing from chilly NYC to bring you the latest Rails news.

Rails 6.0.0 beta1

Many thanks to everyone who helped get this amazing release together. It includes Action Text and Action Mailbox, both recently merged into Rails. Try it out today!

New command to change databases

Have you ever created a new Rails app without specifying the database system upfront, then realized you need to switch over from SQLite to PostgreSQL? That change is now as simple as running: bin/rails db:system:change --to=postgresql

Improved multi-db errors

I think we can all appreciate helpful error messages. Many thanks to Eileen for helping us out, and for all of the incredible work to support multiple databases.

Action Cable Testing

The test helpers from the action-cable-testing gem are now fully merged into Rails. Testing your cables has never been easier.

Endless ranges in where conditions

Ruby 2.6 introduced endless ranges. In Rails 6 we will be able to use them in where conditions: features.where(awesomeness: 10..)

Don’t watch your parents

Before this change, if a directory to be watched was not present in the project, Rails would watch that directory’s parent directory instead. In some cases this could lead to watching the entire Rails root directory.

72 people contributed to Rails over the past month. There are still plenty of open issues that could use your help. Will we see your name on the list next week?

Rails 6.0.0 beta1: Action Mailbox, Action Text, Multiple DBs, Parallel Testing, Webpacker by default

The first beta release of Rails 6 is here! It’s absolutely packed with amazing new stuff that we’re so excited to share. There are two major new frameworks – Action Mailbox and Action Text – and two important scalable-by-default upgrades in great multiple database support and parallel testing.

Action Mailbox routes incoming emails to controller-like mailboxes for processing in Rails. It ships with ingresses for Amazon SES, Mailgun, Mandrill, Postmark, and SendGrid. You can also handle inbound mails directly via the built-in Exim, Postfix, and Qmail ingresses. The foundational work on Action Mailbox was done by George Claghorn and yours truly.

Action Text brings rich text content and editing to Rails. It includes the Trix editor that handles everything from formatting to links to quotes to lists to embedded images and galleries. The rich text content generated by the Trix editor is saved in its own RichText model that’s associated with any existing Active Record model in the application. Any embedded images (or other attachments) are automatically stored using Active Storage and associated with the included RichText model. The foundational work on Action Text was done by Sam Stephenson, Javan Makhmali, and yours truly.

The new multiple database support makes it easy for a single application to connect to, well, multiple databases at the same time! You can either do this because you want to segment certain records into their own databases for scaling or isolation, or because you’re doing read/write splitting with replica databases for performance. Either way, there’s a new, simple API for making that happen without reaching inside the bowels of Active Record. The foundational work for multiple-database support was done by Eileen Uchitelle and Aaron Patterson.

With parallel testing support, you can finally take advantage of all those cores in your machine to run big test suites faster. Each testing worker gets its own database and runs in its own thread, so you’re not pegging one CPU to 100% while the other 9 sit idle by (y’all do have a 10-core iMac Pro, right 😂). Hurray! The foundational work for parallel-testing support was done by Eileen Uchitelle and Aaron Patterson.

Webpacker is now the default JavaScript bundler for Rails through the new app/javascript directory. We’re still using the asset pipeline with Sprockets for CSS and static assets, though. The two integrate very nicely and offer the best trade-off of advanced JavaScript features with an it-just-works approach to other assets.

Those are just some of the marque additions, but Rails 6.0 is also packed with minor changes, fixes, and upgrades. Just some I’d call out: Proper Action Cable testing, Action Cable JavaScript rewritten in ES6, protection against DNS rebinding attacks, and per-environment credentials. Also, Rails 6 will require Ruby 2.5.0+ now. You can check out everything in the individual framework CHANGELOG files for the nitty-gritty rundown.

Finally, you should pay attention to Xavier Noria’s new Zeitwerk code loader for Ruby. It didn’t make the integration cut for beta1, but starting with beta2, it’ll be the new autoloader for Rails. Be prepared to say goodbye to any lingering require or require_dependency calls in your code!

We are still roughly on track with our published timeline for the final Rails 6.0 release, so consult that plan for your migration planning, but please do help us already by testing your application on beta1! I’d also encourage anyone with a moderate level of Rails experience to start any new app using beta1, rather than the Rails 5.2.x series. Basecamp is already running Rails 6.0.0.beta1 in production, and both Shopify and GitHub and surely others will follow close thereafter. This isn’t some rickety-shack release.

This release, and all releases leading up to Rails 6.0 final, was shepherded by release manager Rafael França with support by Kasper Timm Hansen.

Thanks again to everyone who keeps working on making Rails better! It’s incredible that we’re still able to keep this intense rate of improvement going after all these years. Rails has never been in fitter shape to help the broadest number of web developers build excellent apps in a way they love. Let joy be sparked!

Timeline for the release of Rails 6.0

We’ve made enough progress towards the vision for Rails 6.0 that it makes sense to share our aspirational timeline for release. “Aspirational” being the key word, more so than “release” 😄. Software rarely ships on time, and we’ve had plenty of aspirational release dates that came and went in the past. But if optimism isn’t part of the fun of open source, then where would we be?

So. This is the timeline as we currently hope to see it:

  • January 15: Beta 1. We’ll merge the two new frameworks, Action Mailbox and Action Text, for this release.
  • February 1: Beta 2. We’ll make sure any other major improvements are included by then.
  • March 1: Release Candidate 1. We go feature complete by here.
  • April 1: Release Candidate 2. This should really be ready to ship, only new blockers will hold us back.
  • April 30: Final release. Ship and celebrate the release of Rails 6.0 at RailsConf 2019!

It always looks so nice and neat when laid out like that, right? Like some serious engineers did some serious engineering to figure this out. And not just a bunch of software writers plotting down their hopes and dreams. But yeah, it’s really the engineering part we went for (no it wasn’t).

Worth noting: Rails 6.0 will require Ruby 2.5+! So you can get ready by making sure you’re already running this version of Ruby. Also note that following the release of Rails 6.0, only Rails 6.x.y and Rails 5.2.x are guaranteed to receive both major and minor security fixes by Rails core. (As always, we may still choose to provide fixes further back, but there’s no guarantee).

As always, please help us make this a reality by running rails/master for new apps and existing ones, if you sport that High Adventure gene (aka no risk of getting fired if you hit a bug). Basecamp 3 is already running rails/master in production, so you know the main branch is at least in pretty good working order!

Our release manager for Rails 6.0 will be Rafael França with backup from Kasper Timm Hansen 🙏

To Rails Six Oh And Beyond! 🚀🚂

George joins Rails Core and Action Mailbox introduced

Hello. This is Wojtek with a short list of news from Rails world.

George joins Rails Core

George Claghorn is now a member of the Rails core team. Welcome George!

Introducing Action Mailbox for Rails 6

Action Mailbox is the brand new framework coming to Rails 6 extracted from Basecamp.

Add ActiveRecord::Base.connected_to?

Another handy method added to support multiple databases.

Fix numericality equality validation on floats

By casting values to BigDecimal comparision on validation is now more precise.

19 people contributed to Rails last week making lot of improvements.
Until next time!

Introducing Action Mailbox for Rails 6

Action Mailbox is the second brand new framework coming to Rails 6 (the first was Action Text). It serves to route incoming emails to controller-like mailboxes for processing in Rails. It ships with ingresses for Amazon SES, Mailgun, Mandrill, and SendGrid. You can also handle inbound mails directly via the Postfix ingress.

The inbound emails are turned into InboundEmail records using Active Record and feature lifecycle tracking, storage of the original email on cloud storage via Active Storage, and responsible data handling with on-by-default incineration. These inbound emails are routed asynchronously using Active Job to one or several dedicated mailboxes, which are capable of interacting directly with the rest of your domain model.

The framework was, like Action Text and Active Storage, extracted from Basecamp 3. We’ve been using a related approach to route everything from forwarded emails to email replies to messages and discussions. After extracting the ideas into Action Mailbox, we reintegrated the framework into Basecamp, and we’ve been running the code we’re sharing today for over a month in production.

Yes, Rails already had an anemic way of receiving emails using Action Mailer, but it was poorly flushed out, lacked cohesion with the task of sending emails, and offered no help on integrating with popular inbound email processing platforms. Action Mailbox supersedes the receiving part of Action Mailer, which will be deprecated in due course.

Rails 6 is getting closer, but it’s still a ways off – we’re hoping to start the beta process in early 2019. Action Mailbox is already in pretty decent shape, though, and you can even use it with Rails 5.2 applications, if you fancy dancing on the wild side. Just be prepared for things changing as we work our way through community review and towards merging it into rails/rails.

The Action Mailbox framework is based off ideas hatched by Jeremy Daer, and this particular implementation was done as a collaboration between yours truly and George Claghorn.

As part of the introduction of Action Mailbox, I plan to record a video showing off the basics in the near future. But the code is ready and somewhat documented for anyone to dive into already. So why sit on a good thing!

Between Action Text and Action Mailbox, Rails 6 is already shaping up to be one of the biggest releases in the history of the framework. And we’re not even done yet! Our plan is tentatively to have a release candidate version ready for RailsConf 2019 in Minneapolis. Please help us make that promise a reality by trying out Action Mailbox!

New Rails version, early new Ruby version fixes, and more!

Hello, hello! This is Tim here bringing you all the latest right from the Rails Edge.

In the northern hemisphere, daylight is getting scarce, driving certain folks in the Pacific Northwest to drastic measures. But the holiday season is upon us! We got an early pressie in the form of a new Rails release this week. Ans we can all look forward to Ruby release day!

On with the show….

Rails 5.2.2 has been released!

This week saw the release of a new patch version of Rails! Too numerous to list here, check out the official blog post for the full changelog.

This Week’s Contributors

This week 23 people gave back to Rails. For 7 of these folks it was their first time contributing! If you’d like to see yourself in a future edition of this newsletter, or alternatively just want to give back in a purely altruistic gesture, a great place to start can be checking out the list of open issues.

Ruby 2.6.0 fixes

As you may know, the release of Ruby 2.6.0 is right around the corner! We are very grateful to the folks who are already testing Rails on the release candidates and submitting patches ahead of time.

Non-primary mouse button clicks no longer trigger click events

This PR addresses an issue where certain browsers will fire a click event for non-primary mouse button clicks where others will not. They will all now behave uniformly thanks to this fix!

Unpermitted params log message now colorized

More colorized log messages for improved readability!

#delete_all on collection proxy returns count

This makes #delete_all behave uniformly across relations and collection proxies by returning the count of affected rows.

Test helpers docs added to guides

This PR documents some good practices for breaking test helpers out into separate files. Check it out!

ActiveJob::Base#enqueue to return false on failure

This makes the enqueue mechanism more consistent with the ActiveSupport::Callbacks design where if the callback chain is halted, it will return false. You can now use this feedback to determine if your job was in fact enqueued. Hurrah!

As always, there were way too many things to cover in full this week, but you can read about them all here. That’s all folks!

Rails 5.2.2 has been released!

Hi everyone,

I am happy to announce that Rails 5.2.2 has been released.

CHANGES since 5.2.1

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

To see a summary of changes, please read the release 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-256 hashes.

Here are the checksums for 5.2.2:

$ shasum -a 256 *-5.2.2.gem
1d996c7e148dfb9f0587ca520022263f0db0a34ac6f7997d7203500059994620  actioncable-5.2.2.gem
b6e028994d5fabc71977d3d6ca34a52597921162e2fae5d3bdb3b292345ad769  actionmailer-5.2.2.gem
9a73648c98e8b322c72c97f2efe7989832ef18c23c0202704ba33260315e9047  actionpack-5.2.2.gem
1fe90c7eec75f8833b5459099069a40514b72e09d94ab436ece087b87223e0d3  actionview-5.2.2.gem
390a81080e800691131d0f26943216790bc40404f5e6d44b79f92ad185a153ca  activejob-5.2.2.gem
71777d3482c10b3531bcf192a6db624c963c541667c2b9e5829a3cc4eb88bcf6  activemodel-5.2.2.gem
1e8c0fabfd6618e167d125d8d074a1392f4a760b8b16513d179f1765b4d540a5  activerecord-5.2.2.gem
615cc276b090dc96b8367345cb35e97ce073c5cab599b9091a5ca304ce40e230  activestorage-5.2.2.gem
ff393e485ba5e9bad8b8f1d7b89b2addd697420f9faca3c9c9da778efb3ecac7  activesupport-5.2.2.gem
d9ff5d9be16ee277dfc8f3c760bf171aa497d8685ec5c8988fba21a3dbd72cd5  rails-5.2.2.gem
34648d2794966bd330681706edcc73cdd234208a1dd2c27b358491bf2af5f602  railties-5.2.2.gem

As always, huge thanks to the many contributors who helped with this release.

Safety checks to prevent database writes, cache performance boost and more

Cheers for the first day of December! This is Kir bringing you the latest news from the Rails world.

Use raw time string from DB to generate ActiveRecord#cache_version

The PR skips unnecessary attribute casting when generating cache version, which gives a great performance boost for apps that rely on caching.

Add ability to block writes to a database

A brand new while_preventing_writes method on Active Record connection allows you to add safety checks for code that’s not supposed to write to a database.

Bump the minimum version of PostgreSQL to 9.3

PostgreSQL 9.1 and 9.2 have been declared EOL more than a year ago.

28 peoplecontributed to Rails last week. If you want to be part of that, check out the issues list.
Until next time!