Ruby on rails Unicorn在新部署后未正确断开数据库连接

Ruby on rails Unicorn在新部署后未正确断开数据库连接,ruby-on-rails,capistrano,unicorn,octopus,Ruby On Rails,Capistrano,Unicorn,Octopus,在Capistrano部署后,我当前遇到数据库连接问题。在数据库服务器上,unicorn似乎没有断开以前的连接,只是在旧连接的基础上不断添加。我正在做一个预加载真的,我也有八达通宝石安装,以及如果这是重要的。我不太确定谁该为此负责。我已经为重要的部分粘贴了我的unicorn配置。感谢您的帮助 before_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.connection.dis

在Capistrano部署后,我当前遇到数据库连接问题。在数据库服务器上,unicorn似乎没有断开以前的连接,只是在旧连接的基础上不断添加。我正在做一个预加载真的,我也有八达通宝石安装,以及如果这是重要的。我不太确定谁该为此负责。我已经为重要的部分粘贴了我的unicorn配置。感谢您的帮助

before_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
  end
  old_pid = "/tmp/unicorn.my_app_name.pid.oldbin"
  if File.exists?(old_pid) && server.pid != old_pid
    begin
      Process.kill("QUIT", File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|

  ActiveRecord::Base.connection_proxy.instance_variable_get(:@shards).each {|k,v| v.clear_reloadable_connections! }
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
  end

  if Process.ppid > 1 # Not the daemon
  child_pid = server.config[:pid].sub(".pid", ".#{worker.nr}.pid")
  File.open(child_pid, "wb") {|f| f << Process.pid }
  end
end
在服务器、工作程序之前|
如果已定义?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
结束
old_pid=“/tmp/unicorn.my_app_name.pid.oldbin”
如果文件.exists?(旧的_pid)和&server.pid!=老皮德
开始
Process.kill(“退出”,File.read(旧的\u pid.to\u i)
营救错误号::enoint,错误号::ESRCH
结束
结束
结束
在服务器、工人之后|
ActiveRecord::Base.connection_proxy.instance_variable_get(:@shards).each{k,v | v.clear_reloadable_connections!}
如果已定义?(ActiveRecord::Base)
ActiveRecord::Base.build\u连接
结束
如果Process.ppid>1#不是守护进程
child#pid=server.config[:pid].sub(“.pid”,“{worker.nr}.pid”)
open(child|pid,“wb”){| f | f你的“新理论”是正确的。2个工作人员和5个连接将导致总共10个。

答案就在这里-

我将preload app设置为false,似乎它仍然看到相同的问题,这让我相信章鱼可能是问题所在。我还忘了在原始帖子中提到,我每台服务器只有2个unicorn worker。新理论:每个postgres实例都代表池中的一个连接,因此如果有2个worker在池中有5个连接,这将转化为总共10个连接。如果有人能够确认这一点,那就太好了。