Rack::Timeout enhancements for Rails
- custom error pages
- safer service timeouts
- wait timeouts that don’t kill your web server
Add this line to your application’s Gemfile:
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
Test by adding a
sleep call to one of your actions:
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.
For PostgreSQL, set connect and statement timeouts in
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.
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 %>
View the changelog
Everyone is encouraged to help improve this project. Here are a few ways you can help: