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.
Add this line to your application's Gemfile:
gem 'statement_timeout'And then execute:
$ bundleOr install it yourself as:
$ gem install statement_timeoutStatementTimeout.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 wrong connection.
config.default_mode = :transaction
endUser.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, mode: :session do |conn|
conn.execute 'VACUUM ANALYZE tags'
endWe currently support PostgreSQL. We'd love contributions that add MySQL, MariaDB, and SQLite support, but we probably won't add it ourselves.
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.
Yes.
If you have an idea, or have discovered a bug, please open an issue or create a pull request.
The gem is available as open source under the terms of the MIT License.