gpt4 book ai didi

ruby-on-rails - Unicorn - 使用 HUP 实现零停机?

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:48 25 4
gpt4 key购买 nike

我对 unicorn 零停机时间的要求感到困惑,更具体地说,如果它与 preload_app 选项无关。我知道,如果我将 preload_app 设置为 false,我可以简单地发送一个 HUP 信号,unicorn 将自动考虑新代码,但它会以零停机方式进行吗?

此外,如果内存不是问题,我是否需要使用 preload_app true?

最后,我看到了很多例子,其中有一个很大的 before fork block ,其中包含关于 oldpid 的代码。什么时候需要此代码?

谢谢

最佳答案

我设置它的方式是在重新启动 unicorn 服务器时使用类似 kill -USR2 $(cat/path/to/unicorn.pid) 的东西,在我的 unicorn 服务器配置中,像这样(基于 http://unicorn.bogomips.org/examples/unicorn.conf.rb ):

# feel free to point this anywhere accessible on the filesystem
pid "#{shared_path}/pids/unicorn.pid"
before_fork do |server, worker|
# the following is highly recomended for Rails + "preload_app true"
# as there's no need for the master process to hold a connection
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!

# This allows a new master process to incrementally
# phase out the old master process with SIGTTOU to avoid a
# thundering herd (especially in the "preload_app false" case)
# when doing a transparent upgrade. The last worker spawned
# will then kill off the old master process with a SIGQUIT.
old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
end
end
end

这将启动新的 worker 并逐渐关闭旧的。

关于ruby-on-rails - Unicorn - 使用 HUP 实现零停机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com