在rails控制台中postgree太多连接

时间:2016-11-04 15:42:19

标签: ruby-on-rails ruby database postgresql rubygems

我正在使用postgre gem开发一个Ruby on Rails应用程序,这就是我的database.yml的样子:

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"

每当我在本地连接到此数据库时,从rails console我得到的连接太多了。我怎样才能在用户注销后终止代码中的连接,以及在完成更改之后,如何在我的rails控制台中终止一个连接表?

[编辑] 这是错误消息:

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)

[编辑]我添加了我的启动器,仍然没有成功:

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

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法

  

Active Record限制每个应用程序的连接总数   通过数据库设置pool;这是最大尺寸   您的应用可以与数据库建立连接

config/datbase.yml

中的

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

如果您使用的是puma,请使用ENV['RAILS_MAX_THREADS'] more here

它可能会解决问题。

答案 1 :(得分:0)

[解决]

不知怎的,我的演示应用程序没有找到表中的条目,所以它创建了多个池连接,而没有关闭它们,因为在关闭连接之前,会抛出500错误,因此我关闭了一段代码游泳池从未关闭过。更多邻近postgre会话 https://devcenter.heroku.com/articles/concurrency-and-database-connections#connection-pool