Hello Everyone!
This is Vipul, bringing you this week’s changes in the Rails codebase.
Rails World Call for Papers now open
This CFP is open until June 16, with space in the agenda for 26 talks on two tracks, and up to six workshops. Read the full announcement for more details and submit your proposal!
Introduce ActiveRecord.disconnect_all! to close all connections from pool
This change introduces a multi-db aware version of ActiveRecord::Base.connection.disconnect!
.
It also avoids connecting to the database if we weren’t already connected.
This can be useful to reset state in multi-db applications after establish_connection
has been used.
Optimized where query for a range where begin and end are same
This fix, optimizes the where
query for a range where begin and end values are the same.
For example when doing User.where(id: 2..2)
.
# Before
SELECT `users`.* FROM `users` WHERE `users`.`id` BETWEEN 2 AND 2
# After
SELECT `users`.* FROM `users` WHERE `users`.`id`=2
Nice and effective!
Make sure curl is available in generated docker image
The dockerfile template for Apps generated by Rails now includes curl
package by default.
This was necessary for health-checks when docker images are used to deploy with MRSK, which uses curl
.
Return INCLUDE columns in PostgreSQL indexes as strings
Support for INCLUDE
columns for PostgreSQL was introduced in https://github.com/rails/rails/pull/44803.
This change makes sure that include
returns strings instead of symbols, to keep behaviour same as what columns
returns.
Discard connections which may be left in a transaction
Connections are discarded in within_transaction
if rolling back fails after the call to yield raises.
This is done to prevent a connection from being left in a transaction if the rollback actually failed.
This change causes connections to be discarded in the following additional cases where the connection may be left in a transaction:
by rescuing the above failures and discarding the connection.
Enable passing column size to migration generator
This commit enables passing a size
attribute to the rails migration generator,
so that it doesn’t need to be manually added to the migration file after it is generated.
# Before
rails generate migration CreateAuthor name:text{65535}
# After
rails generate migration CreateAuthor name:text{medium}
This generates a migration which includes the size attribute:
class CreateAuthor < ActiveRecord::Migration[7.1]
def change
create_table :authors do |t|
t.text :name, size: :medium
end
end
end
Content Security Policy: add :unsafe_hashes mapping
This change adds the corresponding mapping for unsafe_hashes
, which now allows us to use :unsafe_hashes
instead of 'unsafe-hashes'
in CSP configuration.
Rails.application.configure do
config.content_security_policy do |policy|
# ...
policy.script_src :self, :strict_dynamic, :unsafe_hashes,
"'sha256-lo7ZdP6kFds+wf1WMWvn7MhcFVFJV44kAXODRevzRZ8='" # javascript:false
# ...
end
# ...
end
This allows us to use inline event handlers properly, which used to failwith error on wrong key unsafe-hashes
that was not supported properly before
You can view the whole list of changes here.
We had 20 contributors to the Rails codebase this past week!
Until next time!
Subscribe to get these updates mailed to you.