我正在使用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
答案 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