新部署后,Unicorn不会正确切断数据库连接

时间:2012-10-30 22:25:34

标签: ruby-on-rails capistrano unicorn octopus

我目前在Capistrano部署后遇到数据库连接问题。在数据库服务器上,似乎独角兽不会切断以前的连接,它只是不断添加旧的连接。我正在做一个preload true,如果重要的话,我也安装了章鱼宝石。我不太确定应该为此负责。我已经粘贴了我的独角兽配置来重要的部分。任何帮助表示赞赏!

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

1“ps aux”

1 个答案:

答案 0 :(得分:0)

你的“新理论”是正确的。 2个有5个连接的工人将导致总共10个。 答案就在这里 - Unicorn do not close DB connections