Skip to content

Commit 188ddd5

Browse files
authored
[ruby/sinatra] Release connection to pool outside block (#9336)
ActiveRecord 7.2 introduced ActiveRecord::Base.with_connection which releases the connection after the block has run. This allows us to remove clearing active connections after the request has finished. | |plaintext|update| json| db|query|fortune|weighted_score| |-----------|---------|------|-----|-----|-----|-------|--------------| |master | 73851| 7851|84330|37661|15144| 19934| 1109| |branch | 83429| 8401|91051|41432|14251| 21369| 1147|
1 parent 917d50a commit 188ddd5

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

frameworks/Ruby/sinatra/Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
source 'https://rubygems.org'
22

3-
gem 'activerecord', '~> 7.1', require: 'active_record'
3+
gem 'activerecord', '~> 7.2', require: 'active_record'
44
gem 'oj'
55
gem 'passenger', '~> 6.0', platforms: [:ruby, :mswin], require: false
66
gem 'puma', '~> 6.4', require: false

frameworks/Ruby/sinatra/hello_world.rb

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ def rand1
3939
response['Server'] = SERVER_STRING
4040
end if SERVER_STRING
4141

42-
after do
43-
ActiveRecord::Base.connection_handler.clear_active_connections!
44-
end
45-
4642
# Test type 1: JSON serialization
4743
get '/json' do
4844
json message: 'Hello, World!'
@@ -51,7 +47,7 @@ def rand1
5147
# Test type 2: Single database query
5248
get '/db' do
5349
world =
54-
ActiveRecord::Base.connection_pool.with_connection do
50+
ActiveRecord::Base.with_connection do
5551
World.find(rand1).attributes
5652
end
5753

@@ -61,7 +57,7 @@ def rand1
6157
# Test type 3: Multiple database queries
6258
get '/queries' do
6359
worlds =
64-
ActiveRecord::Base.connection_pool.with_connection do
60+
ActiveRecord::Base.with_connection do
6561
ALL_IDS.sample(bounded_queries).map do |id|
6662
World.find(id).attributes
6763
end
@@ -72,7 +68,7 @@ def rand1
7268

7369
# Test type 4: Fortunes
7470
get '/fortunes' do
75-
@fortunes = ActiveRecord::Base.connection_pool.with_connection do
71+
@fortunes = ActiveRecord::Base.with_connection do
7672
Fortune.all
7773
end.to_a
7874
@fortunes << Fortune.new(
@@ -86,17 +82,18 @@ def rand1
8682

8783
# Test type 5: Database updates
8884
get '/updates' do
89-
worlds =
90-
ALL_IDS.sample(bounded_queries).map do |id|
91-
world = ActiveRecord::Base.connection_pool.with_connection do
92-
World.find(id)
93-
end
85+
worlds = nil
86+
ActiveRecord::Base.with_connection do
87+
worlds = ALL_IDS.sample(bounded_queries).map do |id|
88+
world = World.find(id)
9489
new_value = rand1
9590
new_value = rand1 until new_value != world.randomNumber
9691
{ id: id, randomNumber: new_value }
9792
end
98-
ActiveRecord::Base.connection_pool.with_connection do
99-
World.upsert_all(worlds.sort_by!{_1[:id]})
93+
end
94+
worlds.sort_by!{_1[:id]}
95+
ActiveRecord::Base.with_connection do
96+
World.upsert_all(worlds)
10097
end
10198
json worlds
10299
end

0 commit comments

Comments
 (0)