William Jones
William Jones

Reputation: 18279

Ruby on Rails: How to set a database timeout in application configuration?

I'd like to set my database to timeout requests that do not complete within a set amount of time, in order to prevent outlier requests from monopolizing the entire application.

Is there anything I can add to my Rails configuration files in order to set this?

I tried to add a line I saw often online of timeout: 5000 to my database.yml, but that didn't seem to have any effect.

I tried to make calls to ActiveRecord::Base.connection.execute('set statement_timeout to 5000') in the environment.rb but that causes Rails to error out.

I'm running a Postgres database on Heroku, where I do not have direct database access, hence I cannot do this with database configuration directly. Even if I remotely execute that command from the Heroku console, they can restart my application at any time, and if this isn't re-executed as the application starts, my change gets lost.

Upvotes: 5

Views: 6204

Answers (3)

Bill Lipa
Bill Lipa

Reputation: 2079

database.yml:

defaults: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  min_messages: warning
  variables:
    statement_timeout: 5000

Upvotes: 9

William Jones
William Jones

Reputation: 18279

Got this working, just needed to include the line in environment.rb at the very end, rather than in the beginning or in the block.

Upvotes: 5

Matthew Wood
Matthew Wood

Reputation: 16417

Try this syntax:

SET statement_timeout = 5000;

Upvotes: 2

Related Questions