Ruby on Rails v6.0.3.rc1 Release Notes

Release Date: 2020-05-01 // almost 4 years ago
  • πŸ‘ Active Support

    Array#to_sentence no longer returns a frozen string.

    Before:

    ['one', 'two'].to_sentence.frozen?
    # => true
    

    After:

    ['one', 'two'].to_sentence.frozen?
    # => false
    

    Nicolas Dular

    πŸ“‡ Update ActiveSupport::Messages::Metadata#fresh? to work for cookies with expiry set when
    ActiveSupport.parse_json_times = true.

    Christian Gregg

    Active Model

    • No changes.

    Active Record

    Recommend applications don't use the database kwarg in connected_to

    πŸ“š The database kwarg in connected_to was meant to be used for one-off scripts but is often used in requests. This is really dangerous because it re-establishes a connection every time. It's deprecated in 6.1 and will be removed in 6.2 without replacement. This change soft deprecates it in 6.0 by removing documentation.

    Eileen M. Uchitelle

    πŸ›  Fix support for PostgreSQL 11+ partitioned indexes.

    SebastiΓ‘n Palma

    βž• Add support for beginless ranges, introduced in Ruby 2.7.

    Josh Goodall

    πŸ›  Fix insert_all with enum values

    πŸ›  Fixes #38716.

    Joel Blum

    Regexp-escape table name for MS SQL

    βž• Add Regexp.escape to one method in ActiveRecord, so that table names with regular expression characters in them work as expected. Since MS SQL Server uses "[" and "]" to quote table and column names, and those characters are regular expression characters, methods like pluck and select fail in certain cases when used with the MS SQL Server adapter.

    Larry Reid

    Store advisory locks on their own named connection.

    πŸ”’ Previously advisory locks were taken out against a connection when a migration started. This works fine in single database applications but doesn't work well when migrations need to open new connections which results in the lock getting dropped.

    πŸ”’ In order to fix this we are storing the advisory lock on a new connection with the connection specification name AdisoryLockBase. The caveat is that we need to maintain at least 2 connections to a database while migrations are running in order to do this.

    Eileen M. Uchitelle, John Crepezzi

    Ensure :reading connections always raise if a write is attempted.

    πŸš… Now Rails will raise an ActiveRecord::ReadOnlyError if any connection on the reading handler attempts to make a write. If your reading role needs to write you should name the role something other than :reading.

    Eileen M. Uchitelle

    Enforce fresh ETag header after a collection's contents change by adding
    ActiveRecord::Relation#cache_key_with_version. This method will be used by
    ActionController::ConditionalGet to ensure that when collection cache versioning
    is enabled, requests using ConditionalGet don't return the same ETag header
    πŸš… after a collection is modified. Fixes #38078.

    Aaron Lipman

    πŸ‘ A database URL can now contain a querystring value that contains an equal sign. This is needed to support passing PostgresSQL options.

    Joshua Flanagan

    Retain explicit selections on the base model after applying includes and joins.

    πŸš… Resolves #34889.

    Patrick Rebsch

    Action View

    annotated_source_code returns an empty array so TemplateErrors without a
    template in the backtrace are surfaced properly by DebugExceptions.

    Guilherme Mansur, Kasper Timm Hansen

    βž• Add autoload for SyntaxErrorInTemplate so syntax errors are correctly raised by DebugExceptions.

    Guilherme Mansur, Gannon McGibbon

    Action Pack

    βœ… Include child session assertion count in ActionDispatch::IntegrationTest

    βœ… IntegrationTest#open_session uses dup to create the new session, which
    meant it had its own copy of @assertions. This prevented the assertions
    from being correctly counted and reported.

    Child sessions now have their attr_accessor overriden to delegate to the
    root session.

    πŸ›  Fixes #32142

    Sam Bostock

    πŸ‘· Active Job

    While using perform_enqueued_jobs test helper enqueued jobs must be stored for the later check with
    assert_enqueued_with.

    Dmitry Polushkin

    βž• Add queue name support to Que adapter

    Brad Nauta, Wojciech WnΔ™trzak

    Action Mailer

    • No changes.

    Action Cable

    • No changes.

    Active Storage

    • No changes.

    Action Mailbox

    ⚑️ Update Mandrill inbound email route to respond appropriately to HEAD requests for URL health checks from Mandrill.

    Bill Cromie

    Action Text

    • No changes.

    Railties

    βœ… Cache compiled view templates when running tests by default

    When generating a new app without --skip-spring, caching classes is
    βœ… disabled in environments/test.rb. This implicitly disables caching
    view templates too. This change will enable view template caching by
    βž• adding this to the generated environments/test.rb:

    config.action\_view.cache\_template\_loading = true
    

    Jorge Manrubia

    πŸš… Rails::Application#eager_load! is available again to load application code
    manually as it was possible in previous versions.

    Please, note this is not integrated with the whole eager loading logic that
    πŸš… runs when Rails boots with eager loading enabled, you can think of this
    method as a vanilla recursive code loader.

    βͺ This ability has been restored because there are some use cases for it, such
    as indexers that need to have all application classes and modules in memory.

    Xavier Noria

    Generators that inherit from NamedBase respect --force option

    Josh Brody

    πŸ‘ Regression fix: The Rake task zeitwerk:check supports eager loaded
    namespaces which do not have eager load paths, like the recently added
    i18n. These namespaces are only required to respond to eager_load!.

    Xavier Noria