2

我有一个使用 Unicorn (4.5.0) 和以下 unicorn.rb 文件部署到 Heroku Celadon cedar 堆栈的 rails 应用程序:

worker_processes 2 # amount of unicorn workers to spin up
timeout 30         # restarts workers that hang for 30 seconds
check_client_connection true

在看似随机的时间,它使用的服务(包括数据库)没有任何明显变化,独角兽将进入重启循环。他们将继续重新启动,并出现以下典型错误:

ERROR -- : worker=0 PID:935 timeout (31s > 30s), killing

问题是每个独角兽工人每 30 秒重新启动一次的频率更高。当底层测功机重新启动时它会停止,所以我猜它与独角兽主进程和heroku交互的方式有关。

还有其他人遇到这种情况或对可能的原因有任何想法吗?

4

1 回答 1

0

您不应使用该check_client_connection true选项。

根据 Heroku Unicorn文档,您应该使用如下配置文件:

# config/unicorn.rb
worker_processes 3
timeout 15
preload_app true

before_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end  

after_fork do |server, worker|

  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end
于 2013-03-04T20:16:06.743 回答