Rack::Timeout enhancements for Rails
Ruby HTML
Clone or download
Latest commit 9605b09 May 21, 2018
Permalink
Failed to load latest commit information.
lib Version bump to 0.2.1 [skip ci] May 21, 2018
.gitignore First commit Oct 22, 2014
CHANGELOG.md
Gemfile
LICENSE.txt
README.md Updated description May 21, 2018
Rakefile Prevent prevent RequestExpiryError from killing web server and remove… Jun 25, 2015
slowpoke.gemspec Updated description May 21, 2018

README.md

Slowpoke

Rack::Timeout enhancements for Rails

Installation

Add this line to your application’s Gemfile:

gem 'slowpoke'

And run:

rails generate slowpoke:install

This creates a public/503.html you can customize.

How to Use

The default timeout is 15 seconds. Change this with:

Slowpoke.timeout = 10

or set:

ENV["REQUEST_TIMEOUT"]

Test by adding a sleep call to one of your actions:

sleep(20)

Subscribe to timeouts with:

ActiveSupport::Notifications.subscribe "timeout.slowpoke" do |name, start, finish, id, payload|
  # report timeout
end

To learn more, see the Rack::Timeout documentation.

Database Timeouts

For PostgreSQL, set connect and statement timeouts in config/database.yml:

production:
  connect_timeout: 1 # sec
  variables:
    statement_timeout: 250 # ms

To use a different statement timeout for migrations, set:

ENV["MIGRATION_STATEMENT_TIMEOUT"] = 60000 # ms

Test connect timeouts by setting your database host to an unroutable IP.

development:
  host: 10.255.255.1

Test statement timeouts with the pg_sleep function.

SELECT pg_sleep(20);

Upgrading

0.1.0 removes database timeouts, since Rails supports them by default. To restore the previous behavior, use:

production:
  variables:
    statement_timeout: <%= Slowpoke.timeout * 1000 %>

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help: