Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 767
William Jones Avatar asked Aug 17 '10 19:08

William Jones


3 Answers

database.yml:

defaults: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  min_messages: warning
  variables:
    statement_timeout: 5000
like image 52
Bill Lipa Avatar answered Oct 18 '22 19:10

Bill Lipa


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.

like image 38
William Jones Avatar answered Oct 18 '22 20:10

William Jones


Try this syntax:

SET statement_timeout = 5000;
like image 20
Matthew Wood Avatar answered Oct 18 '22 20:10

Matthew Wood