1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/CHANGELOG.md
eileencodes 66bc2ff6b3 Call while_preventing_writes from connected_to
If a user is using the middleware for swapping database connections and
manually calling `connected_to` in a controller/model/etc without
calling `while_preventing_writes(false)` there is potential for a race
condition where writes will be blocked.

While the user could _just_ call `while_preventing_writes` in the same
place they call `connected_to` this would mean that all cases need to
call two methods.

This PR changes `connected_to` to call `while_preventing_writes`
directly. By default we'll assume you don't want to prevent writes, but
if called with `connected_to(role: :writing, prevent_writes: true)` or
from the middleware (which calls `connected_to` this way) the writes
will be blocked.

For replicas, apps should use readonly users to enforce not writing
rather than `while_preventing_writes` directly.

Should fix the remaining issues in
https://github.com/rails/rails/issues/36830
2019-08-28 13:44:51 -04:00

2.9 KiB

  • Call while_preventing_writes directly from connected_to

    In some cases application authors want to use the database switching middleware and make explicit calls with connected_to. It's possible for an app to turn off writes and not turn them back on by the time we call connected_to(role: :writing)`.

    This change allows apps to fix this by assuming if a role is writing we want to allow writes, except in the case it's explicitly turned off.

    Eileen M. Uchitelle

  • Improve detection of ActiveRecord::StatementTimeout with mysql2 adapter in the edge case when the query is terminated during filesort.

    Kir Shatrov

  • Stop trying to read yaml file fixtures when loading Active Record fixtures.

    Gannon McGibbon

  • Deprecate .reorder(nil) with .first / .first! taking non-deterministic result.

    To continue taking non-deterministic result, use .take / .take! instead.

    Ryuta Kamizono

  • Ensure custom PK types are casted in through reflection queries.

    Gannon McGibbon

  • Preserve user supplied joins order as much as possible.

    Fixes #36761, #34328, #24281, #12953.

    Ryuta Kamizono

  • Allow matches_regex and does_not_match_regexp on the MySQL Arel visitor.

    James Pearson

  • Allow specifying fixtures to be ignored by setting ignore in YAML file's '_fixture' section.

    Tongfei Gao

  • Make the DATABASE_URL env variable only affect the primary connection. Add new env variables for multiple databases.

    John Crepezzi, Eileen Uchitelle

  • Add a warning for enum elements with 'not_' prefix.

    class Foo
      enum status: [:sent, :not_sent]
    end
    

    Edu Depetris

  • Make currency symbols optional for money column type in PostgreSQL

    Joel Schneider

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

    Josh Goodall

  • Add database_exists? method to connection adapters to check if a database exists.

    Guilherme Mansur

  • Loading the schema for a model that has no table_name raises a TableNotSpecified error.

    Guilherme Mansur, Eugene Kenny

  • PostgreSQL: Fix GROUP BY with ORDER BY virtual count attribute.

    Fixes #36022.

    Ryuta Kamizono

  • Make ActiveRecord ConnectionPool.connections method thread-safe.

    Fixes #36465.

    Jeff Doering

  • Add support for multiple databases to rails db:abort_if_pending_migrations.

    Mark Lee

  • Fix sqlite3 collation parsing when using decimal columns.

    Martin R. Schuster

  • Fix invalid schema when primary key column has a comment.

    Fixes #29966.

    Guilherme Goettems Schneider

  • Fix table comment also being applied to the primary key column.

    Guilherme Goettems Schneider

  • Allow generated create_table migrations to include or skip timestamps.

    Michael Duchemin

Please check 6-0-stable for previous changes.