Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
独角兽在Heroku上进入重启循环_Heroku_Ruby On Rails 3.2_Unicorn - Fatal编程技术网

独角兽在Heroku上进入重启循环

独角兽在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)没有任何

我使用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)没有任何明显变化的情况下,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服务器安装,因为这不会很好地扩展;-)