是nginx超时还是rails超时

时间:2014-09-30 15:21:27

标签: ruby-on-rails nginx passenger

我使用nginx和乘客部署了rails应用程序,有一个长时间运行的rails操作,如下所示:

 def handler
  sleep 100
  respond_to do |format|
     format.json { render :json=>{:success=>true}}
  end
end

但是,nginx错误日志会打印此消息:

Couldn't forward the HTTP response back to the HTTP client: It seems the user clicked on the 'Stop' button in his browser. 

显然,点击停止按钮不会调用此错误。也许nginx超时或导轨超时或乘客超时,如何解决这个问题,是否可以通过配置文件解决。有没有帮助

1 个答案:

答案 0 :(得分:0)

Nginx未及时收到Passenger的回复。

您可以通过max_execution_time通过nginx配置增加超时。

处理这个问题的标准方法是让睡眠100完成后台工作(DJ,Resque等,我个人更喜欢resque,但是DJ很容易设置,并且有几乎无限的预设提供优惠)。

然后你会返回一个202,意思是“接受”,用于表示请求的处理没有完成,但服务器确实收到了请求。