2014-09-30 47 views
1

我部署Rails应用程序nginx的和乘客,还有很长的运转轨道的行动,这样的事情:是nginx的超时或轨道超时

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

Rails没有请求超时。我认为这是enginx你的情况:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_connect_timeout或http://www.nginxtips.com/504-gateway-time-out-using-nginx/ – DiegoSalazar 2014-09-30 15:28:18

+0

这是因为您使用乘客内置的Nginx模块,通过上游配置开始使用独立进程,问题应该修复。 – Anatoly 2014-10-01 10:41:30

+0

thx,我找到了原因,我使用extjs Ajax请求前面,默认超时是30秒。 – 2014-10-02 03:05:36

回答

0

Nginx没有及时得到Passenger的响应。

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

处理此问题的标准方法是将睡眠100踢到背景作业(DJ,Resque et,我个人更喜欢resque as my go,但DJ很容易设置,并且有几乎无限的前置可提供)。

然后,您将返回一个202表示“accepted”并用于表示请求处理未完成但服务器确实收到请求。

+0

thx,我找到了原因,我使用extjs Ajax请求前端,默认超时时间为30秒。 – 2014-10-02 03:09:09