From dd79e4eeffb9b6bb6333d41629d44e1dcfe15c3e Mon Sep 17 00:00:00 2001 From: ohbarye Date: Wed, 3 Dec 2025 01:07:31 +0900 Subject: [PATCH 1/2] Support activerecord 8.1 explicitly --- .github/workflows/test.yml | 3 +++ gemfiles/activerecord_8_1.gemfile | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 gemfiles/activerecord_8_1.gemfile diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b862225..8715947 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,6 +26,7 @@ jobs: - '7_1' - '7_2' - '8_0' + - '8_1' - 'latest' mysql-version: - '8.0' @@ -33,6 +34,8 @@ jobs: # Exclude conditions that don't meat the minimal requirement - ruby-version: '3.1' activerecord-version: '8_0' + - ruby-version: '3.1' + activerecord-version: '8_1' # Exclude duplicate conditions - ruby-version: '3.1' diff --git a/gemfiles/activerecord_8_1.gemfile b/gemfiles/activerecord_8_1.gemfile new file mode 100644 index 0000000..a4d34db --- /dev/null +++ b/gemfiles/activerecord_8_1.gemfile @@ -0,0 +1,2 @@ +eval_gemfile("../Gemfile") +gem "activerecord", "~> 8.1.0" From 72fd34115c6ee0267744a3c3b5a58e856a97ebff Mon Sep 17 00:00:00 2001 From: ohbarye Date: Sun, 14 Dec 2025 17:19:09 +0900 Subject: [PATCH 2/2] Fix test: follow ActiveRecord 8.1 behavior In ActiveRecord 8.1+, replica connections cannot execute lock queries, so it raises ActiveRecord::ReadOnlyError instead of ActiveRecord::Deadlocked. --- .../abstract_mysql_adapter_spec.rb | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/spec/activerecord/debug_errors/ext/connection_adapters/abstract_mysql_adapter_spec.rb b/spec/activerecord/debug_errors/ext/connection_adapters/abstract_mysql_adapter_spec.rb index 03d0dfd..1f1e0d2 100644 --- a/spec/activerecord/debug_errors/ext/connection_adapters/abstract_mysql_adapter_spec.rb +++ b/spec/activerecord/debug_errors/ext/connection_adapters/abstract_mysql_adapter_spec.rb @@ -58,12 +58,22 @@ def cause_deadlock(role:) context "when the user doesn't have the permission to execute 'SHOW ENGINE INNODB STATUS'" do it "displays an error message" do - expect { - ActiveRecord::Base.connected_to(role: :reading) do - cause_deadlock(role: :reading) - end - }.to raise_error(ActiveRecord::Deadlocked) - expect(log.string).to include("Failed to execute") + # In ActiveRecord 8.1+, replica connections cannot execute lock queries, + # so it raises ActiveRecord::ReadOnlyError instead of ActiveRecord::Deadlocked. + if ActiveRecord.version >= Gem::Version.new("8.1") + expect { + ActiveRecord::Base.connected_to(role: :reading) do + cause_deadlock(role: :reading) + end + }.to raise_error(ActiveRecord::ReadOnlyError) + else + expect { + ActiveRecord::Base.connected_to(role: :reading) do + cause_deadlock(role: :reading) + end + }.to raise_error(ActiveRecord::Deadlocked) + expect(log.string).to include("Failed to execute") + end end end end