我的生产服务器上的独角兽经历了一个非常奇怪的问题.
虽然配置文件规定preload_app为true,但是将USR2发送到主进程并不会产生任何响应,而且似乎独角兽完全忽略了信号.
在另一个发送USR2的服务器上,主进程更改为(old)状态,并成功启动新的主进程.
有问题的服务器正在使用RVM& bundler,所以我假设它有点相关(另一个是香草红宝石).
发送USR2以外的信号(QUIT,HUP)工作正常.
有没有办法跟踪幕后发生的事情? Unicorn的日志文件是完全空的.
虽然配置文件规定preload_app为true,但是将USR2发送到主进程并不会产生任何响应,而且似乎独角兽完全忽略了信号.
在另一个发送USR2的服务器上,主进程更改为(old)状态,并成功启动新的主进程.
有问题的服务器正在使用RVM& bundler,所以我假设它有点相关(另一个是香草红宝石).
发送USR2以外的信号(QUIT,HUP)工作正常.
有没有办法跟踪幕后发生的事情? Unicorn的日志文件是完全空的.
解决方法
我怀疑你的问题可能是你的Gemfile已经改变了,但是你没有以允许USR2使用新的Gemfile的方式启动独角兽.因此,当您尝试重新启动应用程序时,它会崩溃.
检查您的/log/unicorn.log以了解可能失败的详细信息.
如果您使用Capistrano,请指定BUNDLE_GEMFILE作为符号链接,例如:
run "cd #{current_path} && BUNDLE_GEMFILE=#{current_path}/Gemfile bundle exec unicorn -c #{config_path} -E #{unicorn_env} -D"
演示了这个Here’s a PR.