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:
$ bundle
Or install it yourself as:
$ gem install statement_timeout
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 wrong connection. config.default_mode = :transaction end
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, mode: :session do |conn| conn.execute 'VACUUM ANALYZE tags' end
We 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.