在Nginx背后“连接到上游时没有上游”

时间:2010-08-20 03:39:39

标签: ruby-on-rails nginx thin

我在50-100个请求中可能有一个收到此错误。我在nginx后面运行10个Thin实例,我认为我的负载不足以在所有10个实例中最大化使用..我希望nginx等待,即使所有实例都忙(也许不是??) 。有没有其他人见过这个?我试图找出一种调试它的好方法。

这是我的设置: Rackspace Cloud Servers上的CentOS 5.5 2GB实例 nginx 0.7.67 薄1.2.7 Rails 3RC Ruby 1.9.2rc2

Nginx和10个Thin实例在同一台服务器上运行。

1 个答案:

答案 0 :(得分:4)

caches_action加上动作中的redirect_to导致了这一点。它似乎是写入缓存(或可能从中读取)然后重定向导致连接过早关闭。通过使用caches_action中的if条件来检测重定向是否会发生,我能够绕过这个问题。如果我发现它会发生,我在x.cacheable中返回false?

my_controller.rb

caches_action :show, :if => Proc.new { |x| x.cacheable? }

action_controller.rb

def cacheable?
  params[:id]>1000 ? true : false
end

基本上,如果params [:id]< 1000,我需要重定向到另一个控制器,那么可缓存吗? def检查这个并告诉caches_action不要在这种特殊情况下缓存。