activerecord 7.1.5.2 → 7.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f3204f7f0cb9d1d71ab7642643724921e6c942f4f7c99beeae9ac49342f70ed7
|
|
4
|
+
data.tar.gz: 47c12eb7710323f64881e54ac05b70cbf6e365f7559c52579c295e6c35b2b547
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d2807f2124023b0b00d632ad9dc46c5eabd404e35fd7f75a46eb285f9875455c7444b9c059c437fef31bcc3d6694779e19cffa69ce5be81139af959ca86c8490
|
|
7
|
+
data.tar.gz: ea070b99aaacc7b369b8daed1256cae97f6d81f452698900c8fa25dc3f243af1900599b457b7461b2d544ff00b69e1b9b850bcf02e40b73e7581cf1abce8796f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
## Rails 7.1.6 (October 28, 2025) ##
|
|
2
|
+
|
|
3
|
+
* Gracefully handle `Timeout.timeout` firing during connection configuration.
|
|
4
|
+
|
|
5
|
+
Use of `Timeout.timeout` could result in improperly initialized database connection.
|
|
6
|
+
|
|
7
|
+
This could lead to a partially configured connection being used, resulting in various exceptions,
|
|
8
|
+
the most common being with the PostgreSQLAdapter raising `undefined method `key?' for nil`
|
|
9
|
+
or `TypeError: wrong argument type nil (expected PG::TypeMap)`.
|
|
10
|
+
|
|
11
|
+
*Jean Boussier*
|
|
12
|
+
|
|
13
|
+
* Fix error handling during connection configuration.
|
|
14
|
+
|
|
15
|
+
Active Record wasn't properly handling errors during the connection configuration phase.
|
|
16
|
+
This could lead to a partially configured connection being used, resulting in various exceptions,
|
|
17
|
+
the most common being with the PostgreSQLAdapter raising `undefined method `key?' for nil`
|
|
18
|
+
or `TypeError: wrong argument type nil (expected PG::TypeMap)`.
|
|
19
|
+
|
|
20
|
+
*Jean Boussier*
|
|
21
|
+
|
|
22
|
+
* Fix prepared statements on mysql2 adapter.
|
|
23
|
+
|
|
24
|
+
*Jean Boussier*
|
|
25
|
+
|
|
26
|
+
* Fix a race condition in `ActiveRecord::Base#method_missing` when lazily defining attributes.
|
|
27
|
+
|
|
28
|
+
If multiple thread were concurrently triggering attribute definition on the same model,
|
|
29
|
+
it could result in a `NoMethodError` being raised.
|
|
30
|
+
|
|
31
|
+
*Jean Boussier*
|
|
32
|
+
|
|
33
|
+
|
|
1
34
|
## Rails 7.1.5.2 (August 13, 2025) ##
|
|
2
35
|
|
|
3
36
|
* Call inspect on ids in RecordNotFound error
|
|
@@ -6,6 +39,7 @@
|
|
|
6
39
|
|
|
7
40
|
*Gannon McGibbon*, *John Hawthorn*
|
|
8
41
|
|
|
42
|
+
|
|
9
43
|
## Rails 7.1.5.1 (December 10, 2024) ##
|
|
10
44
|
|
|
11
45
|
* No changes.
|
|
@@ -138,6 +138,7 @@ module ActiveRecord
|
|
|
138
138
|
super(attribute_names)
|
|
139
139
|
@attribute_methods_generated = true
|
|
140
140
|
end
|
|
141
|
+
|
|
141
142
|
true
|
|
142
143
|
end
|
|
143
144
|
|
|
@@ -480,23 +481,27 @@ module ActiveRecord
|
|
|
480
481
|
end
|
|
481
482
|
|
|
482
483
|
def method_missing(name, ...)
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
# Some attribute methods weren't generated yet, we retry the call
|
|
495
|
-
return public_send(name, ...)
|
|
496
|
-
end
|
|
484
|
+
# We can't know whether some method was defined or not because
|
|
485
|
+
# multiple thread might be concurrently be in this code path.
|
|
486
|
+
# So the first one would define the methods and the others would
|
|
487
|
+
# appear to already have them.
|
|
488
|
+
self.class.define_attribute_methods
|
|
489
|
+
|
|
490
|
+
# So in all cases we must behave as if the method was just defined.
|
|
491
|
+
method = begin
|
|
492
|
+
self.class.public_instance_method(name)
|
|
493
|
+
rescue NameError
|
|
494
|
+
nil
|
|
497
495
|
end
|
|
498
496
|
|
|
499
|
-
|
|
497
|
+
# The method might be explicitly defined in the model, but call a generated
|
|
498
|
+
# method with super. So we must resume the call chain at the right step.
|
|
499
|
+
method = method.super_method while method && !method.owner.is_a?(GeneratedAttributeMethods)
|
|
500
|
+
if method
|
|
501
|
+
method.bind_call(self, ...)
|
|
502
|
+
else
|
|
503
|
+
super
|
|
504
|
+
end
|
|
500
505
|
end
|
|
501
506
|
|
|
502
507
|
def attribute_method?(attr_name)
|
|
@@ -690,7 +690,7 @@ module ActiveRecord
|
|
|
690
690
|
|
|
691
691
|
reset_transaction(restore: restore_transactions) do
|
|
692
692
|
clear_cache!(new_connection: true)
|
|
693
|
-
|
|
693
|
+
attempt_configure_connection
|
|
694
694
|
end
|
|
695
695
|
rescue => original_exception
|
|
696
696
|
translated_exception = translate_exception_class(original_exception, nil, nil)
|
|
@@ -742,7 +742,7 @@ module ActiveRecord
|
|
|
742
742
|
def reset!
|
|
743
743
|
clear_cache!(new_connection: true)
|
|
744
744
|
reset_transaction
|
|
745
|
-
|
|
745
|
+
attempt_configure_connection
|
|
746
746
|
end
|
|
747
747
|
|
|
748
748
|
# Removes the connection from the pool and disconnect it.
|
|
@@ -778,7 +778,7 @@ module ActiveRecord
|
|
|
778
778
|
if @unconfigured_connection
|
|
779
779
|
@raw_connection = @unconfigured_connection
|
|
780
780
|
@unconfigured_connection = nil
|
|
781
|
-
|
|
781
|
+
attempt_configure_connection
|
|
782
782
|
@verified = true
|
|
783
783
|
return
|
|
784
784
|
end
|
|
@@ -1225,6 +1225,13 @@ module ActiveRecord
|
|
|
1225
1225
|
def configure_connection
|
|
1226
1226
|
end
|
|
1227
1227
|
|
|
1228
|
+
def attempt_configure_connection
|
|
1229
|
+
configure_connection
|
|
1230
|
+
rescue Exception # Need to handle things such as Timeout::ExitException
|
|
1231
|
+
disconnect!
|
|
1232
|
+
raise
|
|
1233
|
+
end
|
|
1234
|
+
|
|
1228
1235
|
def default_prepared_statements
|
|
1229
1236
|
true
|
|
1230
1237
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activerecord
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Heinemeier Hansson
|
|
@@ -15,28 +15,28 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 7.1.
|
|
18
|
+
version: 7.1.6
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 7.1.
|
|
25
|
+
version: 7.1.6
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: activemodel
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
30
|
- - '='
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 7.1.
|
|
32
|
+
version: 7.1.6
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
37
|
- - '='
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 7.1.
|
|
39
|
+
version: 7.1.6
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: timeout
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -469,10 +469,10 @@ licenses:
|
|
|
469
469
|
- MIT
|
|
470
470
|
metadata:
|
|
471
471
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
|
472
|
-
changelog_uri: https://github.com/rails/rails/blob/v7.1.
|
|
473
|
-
documentation_uri: https://api.rubyonrails.org/v7.1.
|
|
472
|
+
changelog_uri: https://github.com/rails/rails/blob/v7.1.6/activerecord/CHANGELOG.md
|
|
473
|
+
documentation_uri: https://api.rubyonrails.org/v7.1.6/
|
|
474
474
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
|
475
|
-
source_code_uri: https://github.com/rails/rails/tree/v7.1.
|
|
475
|
+
source_code_uri: https://github.com/rails/rails/tree/v7.1.6/activerecord
|
|
476
476
|
rubygems_mfa_required: 'true'
|
|
477
477
|
rdoc_options:
|
|
478
478
|
- "--main"
|