There是一条注释,解释了为什么您不需要(也不应该)在before_fork中断开与DB和Redis的连接:
通过在before_fork中断开连接,每次生成一个孩子时,你都在关闭父进程的连接,这只需要一次 - 你正在击败一匹死马。连接处理是孩子关注的问题(after_fork),而不是父母的关注(before_fork)。
ActiveRecord的连接池现在由
Process.pid
键控,因此在after_fork中调用ActiveRecord::Base.establish_connection
始终是安全的 - 连接永远不会与父级共享,无论如何都不需要在主服务器上断开连接。在Unicorn上,主进程是一个单独的进程,可以在很多方面使用 - 生成一个线程并在其中运行EventMachine循环来运行预定/后台作业等。此外,保持AR连接打开很有用。只有主线程才会继承给子进程(至少在Linux系统上),所以拥有线程是安全的。
这是真的吗?
答案 0 :(得分:1)
这绝对不是必需的,但我还是喜欢这样做 - 我们运行了大量的应用程序服务器,如果我们没有断开主进程与数据库的连接,我们就会持有许多联系无缘无故地开放。