2012-10-30 1 views
3

Capistrano를 배포 한 후 현재 데이터베이스 연결에 문제가 있습니다. 데이터베이스 서버에서는 유니콘이 이전 연결을 끊지 않는 것처럼 보이며 이전 연결을 계속 추가합니다. 나는 참된 예압을하고 있으며, 중요하다면 문어 보석도 설치되어있다. 나는이 일로 누가 책임이 있는지 확신 할 수 없다. 중요한 부분에 대한 유니콘 구성을 붙여 넣었습니다. 어떤 도움을 주셔서 감사합니다!새로운 배포 후에 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 

1 "추신 보조"

+0

나는 preload app를 false로 설정했다. 그리고 나는 여전히 문어가 문제가 될 수 있다고 생각하게하는 동일한 문제를보고있다. 또한 원래 게시물에서 서버 당 2 명의 유니콘 작업자 만 있다고 언급하는 것을 잊어 버렸습니다. – nvd90

+0

새로운 이론 : 각 postgres 인스턴스는 풀에있는 연결을 나타냅니다. 풀에 5 개의 연결에 2 명의 작업자가 있으면 총 10 개의 연결로 변환됩니다. 누군가가 이것을 확인할 수 있다면 좋을 것입니다. – nvd90

답변