Sunday, August 25, 2024

ActionText store_if_blank, SQLite non-GVL-blocking busy handler, and more!

Posted by zzak

Hi, it’s zzak. Let’s explore this week’s changes in the Rails codebase.

In case you missed it, Rails 7.2.1 and 7.1.4 were released this week!

Allow use of alternative database interfaces
Prior to this PR, rails dbconsole was hardcoded to use the default interface for the given database. This command can now be configured via the config.active_record.database_cli option.

Encryption casting with “encrypts” before “serialize”
This PR ensures encrypted binary data is properly handled in PostgreSQL.

Add “store_if_blank” option to “has_rich_text”
A new option was added to ActionText to allow configuring whether or not to store empty rich text fields. This PR introduces a store_if_blank option on has_rich_text. It defaults to true (the current behaviour); if you pass false, ActionText won’t create ActionText::RichText records when saving with a blank value.

SQLite non-GVL-blocking, fair retry interval busy handler
This PR improves SQLite connection handling for timeouts, by avoiding Ruby’s Global Variable Lock (GVL) it can reduce SQLite3::BusyException errors and latency.

Support dumping PostgreSQL inheritance & partitioning options
With this change, we can support PostgreSQL native partitioning and inheritance options in create_table.

Infer default “:inverse_of” option for DelegatedType
When using delegated types, we can now infer the :inverse_of option for the association.

You can view the whole list of changes here. We had 36 contributors to the Rails codebase this past week!

Until next time!

Subscribe to get these updates mailed to you.