The project is in a healthy, maintained state
Wrap an Active Record transaction or query in a local statement timeout.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

Runtime

>= 6.0
 Project Readme

statement_timeout

CI Gem Version

Use statement_timeout to wrap an Active Record transaction or query in a local statement timeout.

This gem was extracted from Keygen.

Sponsored by:

Keygen

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 wrong 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, mode: :session 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.