Skip to content

Instantly share code, notes, and snippets.

@EdwardDiehl
Forked from ioquatix/connections.md
Created October 1, 2024 18:33
Show Gist options
  • Save EdwardDiehl/d90480cb5f4f1a2aa5dfdf6e1ddeea9c to your computer and use it in GitHub Desktop.
Save EdwardDiehl/d90480cb5f4f1a2aa5dfdf6e1ddeea9c to your computer and use it in GitHub Desktop.
Show how `with_connection` and `lease_connection` interact.

Permanent Connection Checkout

Rails 7.2 defaults:

Highscore.connection
# => #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x000000000080e8 env_name="development" role=:writing>

With config.active_record.permanent_connection_checkout = :disallowed:

Highscore.connection
# Called deprecated `ActiveRecord::Base.connection` method. (ActiveRecord::ActiveRecordError)
# Either use `with_connection` or `lease_connection`.

Highscore.lease_connection
# => #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x000000000103b0 env_name="development" role=:writing>

Highscore.connection_pool.active_connection?
# => #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x000000000103b0 env_name="development" role=:writing>

Highscore.release_connection
# => true

Highscore.connection_pool.active_connection?
# => nil

With Connection

Highscore.connection_pool.active_connection?
# => nil

Highscore.first
# => #<Highscore:0x00007d3751d853c8 id: 1, name: "Anonymous", score: 1, created_at: "2024-04-24 06:12:16.208562000 +0000", updated_at: "2024-04-24 06:12:16.208562000 +0000">

Highscore.connection_pool.active_connection?
# => nil

Highscore.with_connection do
  Highscore.connection_pool.active_connection?
end
# => #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x0000000002a7d8 env_name="development" role=:writing>

Highscore.connection_pool.active_connection?
# => nil

Leased Connection within With Connection

Highscore.with_connection do
  Highscore.lease_connection
end

Highscore.connection_pool.active_connection?
# => #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x00000000038270 env_name="development" role=:writing>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment