独角兽在Heroku上进入重启循环
我使用Unicorn(4.5.0)和以下Unicorn.rb文件将rails应用程序部署到Heroku Celadon cedar stack:独角兽在Heroku上进入重启循环,heroku,ruby-on-rails-3.2,unicorn,Heroku,Ruby On Rails 3.2,Unicorn,我使用Unicorn(4.5.0)和以下Unicorn.rb文件将rails应用程序部署到Heroku Celadon cedar stack: worker_processes 2 # amount of unicorn workers to spin up timeout 30 # restarts workers that hang for 30 seconds check_client_connection true 在看似随机的时间,在其使用的服务(包括DB)没有任何
worker_processes 2 # amount of unicorn workers to spin up
timeout 30 # restarts workers that hang for 30 seconds
check_client_connection true
在看似随机的时间,在其使用的服务(包括DB)没有任何明显变化的情况下,unicorns将进入重启循环。它们将继续重新启动,出现以下典型错误:
ERROR -- : worker=0 PID:935 timeout (31s > 30s), killing
问题是,每个独角兽工作人员的重启频率高于每30秒一次。它在底层dyno重新启动时停止,所以我猜这与unicorn master进程和heroku的交互方式有关
其他任何人遇到这种情况或对可能的原因有任何想法吗?您不应该使用
检查客户机连接是否正确选项
根据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
你能解释一下为什么你认为检查客户连接是罪魁祸首吗?fork回调的前后主要是因为preload_app设置为true。我以前也有过这种情况,但我切换回了preload_app false,因为我遇到了一些不相关的问题。check_client_connection是一个相对较新的选项,从unicorn文档中可以安全地打开它。文档中指出,这仅适用于unix域套接字和环回接口。我相信Heroku不会使用本地Web服务器安装,因为这不会很好地扩展;-)