我们的独角兽过程完全吞噬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。还有其他事情发生在这里。我在系统上的所有宝石上运行了grep
,唯一提到USR2的是Unicorn和雨滴(独角兽的依赖)。我不知道这个信号是如何被吞噬的。
这是一个Ruby 2.0.0p0 Rails 4应用程序。