unicorn:我需要在before_fork块中断开与数据库的连接吗?

时间:2015-04-28 11:41:12

标签: ruby-on-rails activerecord unicorn

There是一条注释,解释了为什么您不需要(也不应该)在before_fork中断开与DB和Redis的连接:

  

通过在before_fork中断开连接,每次生成一个孩子时,你都在关闭父进程的连接,这只需要一次 - 你正在击败一匹死马。连接处理是孩子关注的问题(after_fork),而不是父母的关注(before_fork)。

     

ActiveRecord的连接池现在由Process.pid键控,因此在after_fork中调用ActiveRecord::Base.establish_connection始终是安全的 - 连接永远不会与父级共享,无论如何都不需要在主服务器上断开连接。

     

在Unicorn上,主进程是一个单独的进程,可以在很多方面使用 - 生成一个线程并在其中运行EventMachine循环来运行预定/后台作业等。此外,保持AR连接打开很有用。只有主线程才会继承给子进程(至少在Linux系统上),所以拥有线程是安全的。

这是真的吗?

1 个答案:

答案 0 :(得分:1)

这绝对不是必需的,但我还是喜欢这样做 - 我们运行了大量的应用程序服务器,如果我们没有断开主进程与数据库的连接,我们就会持有许多联系无缘无故地开放。

相关问题