我使用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超时或导轨超时或乘客超时,如何解决这个问题,是否可以通过配置文件解决。有没有帮助
答案 0 :(得分:0)
Nginx未及时收到Passenger的回复。
您可以通过max_execution_time通过nginx配置增加超时。
处理这个问题的标准方法是让睡眠100完成后台工作(DJ,Resque等,我个人更喜欢resque,但是DJ很容易设置,并且有几乎无限的预设提供优惠)。
然后你会返回一个202,意思是“接受”,用于表示请求的处理没有完成,但服务器确实收到了请求。