Skip to content

Instantly share code, notes, and snippets.

@ioquatix
Last active October 10, 2024 18:39
Show Gist options
  • Save ioquatix/f419bf18d7af8ba5cda81fdadee458f6 to your computer and use it in GitHub Desktop.
Save ioquatix/f419bf18d7af8ba5cda81fdadee458f6 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>
@ioquatix
Copy link
Author

ioquatix commented Sep 26, 2024

In general, you should probably add

config.active_record.permanent_connection_checkout = :disallowed

to your environment configuration if you want to catch bad behaviour.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment