Vlad Balanescu
Vlad Balanescu

Reputation: 674

Postgree too many connections in rails console

I am developing a Ruby on Rails app using postgre gem and this is how my database.yml looks like:

development:
 adapter: postgresql
  encoding: utf-8
  pool: 5
  username: "hytxlzju"
  password: "xxxxx"
  host: "jumbo.db.elephantsql.com"
  port: "5432"
  database: "hytxlzju"

production:
  adapter: postgresql
  encoding: utf-8
  pool: 5
  username: "hytxlzju"
  password: "xxxxxx"
  host: "jumbo.db.elephantsql.com"
  port: "5432"
  database: "hytxlzju"

Whenever I am connecting to this db locally, from the rails console I am getting too many connections. How can I kill a connection in the code, once the user logged out, in the code, and how can I kill one in my rails console, after I finished altering the tables?

[EDIT] This is the error message:

C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/activerecord-3.2.22.5/lib/active_record/connection_adapters/postgresql_adapter.rb:12
22:in `initialize': FATAL:  too many connections for role "hytxlzju" (PG::ConnectionBad)

[EDIT] I added my initilizer, still no success:

Rails.application.config.after_initialize do
  ActiveRecord::Base.connection_pool.disconnect!

  ActiveSupport.on_load(:active_record) do
    config = ActiveRecord::Base.configurations[Rails.env] ||
                Rails.application.config.database_configuration[Rails.env]
    config['pool']              = ENV['DB_POOL']      || ENV['RAILS_MAX_THREADS'] || 5
    ActiveRecord::Base.establish_connection(config)
  end
end

Upvotes: 2

Views: 1297

Answers (2)

Vlad Balanescu
Vlad Balanescu

Reputation: 674

[SOLVED]

Somehow my demo app was not finding the entries in the tables, so it was creating multiple pools connections, without closing them, because before closing the connection, a 500 error was getting thrown, hence that bit of code where I closed the pool was never closed. More abut postgre session here https://devcenter.heroku.com/articles/concurrency-and-database-connections#connection-pool

Upvotes: 0

Rajarshi Das
Rajarshi Das

Reputation: 12330

You can try the below approach

Active Record limits the total number of connections per application through a database setting pool; this is the maximum size of the connections your app can have to the database

in config/datbase.yml

pool: <%= ENV['RAILS_MAX_THREADS'] || 5 %>

If you are using puma then use ENV['RAILS_MAX_THREADS'] more here

It might solve the problem.

Upvotes: 1

Related Questions