statement_timeout
Use statement_timeout to wrap an Active Record transaction or query in a
local statement timeout.
This gem was extracted from Keygen.
Sponsored by:
A fair source software licensing and distribution API.
Installation
Add this line to your application's Gemfile:
gem 'statement_timeout'
And then execute:
$ bundle
Or install it yourself as:
$ gem install statement_timeout
Configuration
StatementTimeout.configure do |config|
# When using a connection pooler like PgBouncer while in transaction mode, it
# is required that you change the default mode from :session to :transaction
# otherwise the statement timeouts may be SET on the right connection.
config.default_mode = :transaction
end
Usage
User.statement_timeout 42.minutes do
some_expensive_operation
end
User.posts.statement_timeout 10.seconds do
some_cheap_operation
end
Post.statement_timeout 10.minutes do |conn|
conn.transaction { archive_old_posts }
end
Tag.statement_timeout 6.hours do |conn|
conn.execute 'VACUUM ANALYZE tags'
end
Supported databases
We currently support PostgreSQL. We'd love contributions that add MySQL, MariaDB, and SQLite support, but we probably won't add it ourselves.
Supported Rubies
statement_timeout supports Ruby 3.1 and above. We encourage you to upgrade
if you're on an older version. Ruby 3 provides a lot of great features, like
better pattern matching and a new shorthand hash syntax.
Is it any good?
Yes.
Contributing
If you have an idea, or have discovered a bug, please open an issue or create a pull request.
License
The gem is available as open source under the terms of the MIT License.