【发布时间】:2014-07-23 21:48:56
【问题描述】:
我们的独角兽进程完全吞噬了 USR2 信号。它似乎什么也没做。
发送信号时,unicorn.log 中绝对没有记录任何内容。通常导致此问题的不是 Gemfile 错误。
Unicorn 可以很好地响应其他信号(USR1、QUIT 等)
网上有一个人遇到了同样的问题,我们最终使用了他的“解决方案”:
before_fork do |server, worker|
Signal.trap('USR2') do
server.send(:reexec)
end
end
这最终会调用与通常相同的东西:https://github.com/defunkt/unicorn/blob/20f3b0c94474709fc6468a8a707b1c205ca80677/lib/unicorn/http_server.rb#L306-307
这个解决方案有效,但显然感觉很hacky。这里还有其他事情发生。我在系统上的所有 gem 上运行了grep,唯一提到 USR2 的是 Unicorn 和雨滴(Unicorn 的依赖项)。不知道这个信号是怎么被吞掉的。
这是一个 Ruby 2.0.0p0 Rails 4 应用程序。
【问题讨论】:
标签: ruby-on-rails ruby signals unicorn