应用程序详细信息:
轨道3.1.0
Ruby 1.9.2
独角兽4.2.0
版本1.20.0
nginx/1.0.14
redis 2.4.8
我正在使用active_admin-gem,用于所有URL的获取响应200,
但只有一个URL在生产时给出502错误。
耙式路线:
admin_links GET /admin/links(.:format) {:action=>"index", :controller=>"admin/links"}
它致力于地方(发展)。
localhost日志:响应代码200
Started GET "/admin/links" for 127.0.0.1 at 2013-02-12 11:05:21 +0530
Processing by Admin::LinksController#index as */*
Parameters: {"link"=>{}}
Geokit is using the domain: localhost
AdminUser Load (0.2ms) SELECT `admin_users`.* FROM `admin_users` WHERE `admin_users`.`id` = 3 LIMIT 1
(0.1ms) SELECT 1 FROM `links` LIMIT 1 OFFSET 0
(0.1ms) SELECT COUNT(*) FROM `links`
(0.2ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM `links` LIMIT 10 OFFSET 0) subquery_for_count
CACHE (0.0ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM `links` LIMIT 10 OFFSET 0) subquery_for_count
Link Load (0.6ms) SELECT `links`.* FROM `links` ORDER BY `links`.`id` desc LIMIT 10 OFFSET 0
Link Load (6677.2ms) SELECT `links`.* FROM `links`
Rendered /usr/local/rvm/gems/ruby-1.9.2-head/gems/activeadmin-0.4.2/app/views/active_admin/resource/index.html.arb (14919.0ms)
Completed 200 OK in 15663ms (Views: 8835.0ms | ActiveRecord: 6682.8ms | Solr: 0.0ms)
生产日志:502响应
Started GET "/admin/links" for 103.9.12.66 at 2013-02-12 05:25:37 +0000
Processing by Admin::LinksController#index as */*
Parameters: {"link"=>{}}
NGinx错误日志
2013/02/12 07:36:16 [error] 32401#0: *1948 upstream prematurely closed connection while reading response header from upstream
不知道发生了什么事,可以找个朋友帮我吗。
您有超时问题。
解决它
HTTP/1.1 502坏网关
表示nginx在与其配置的上游通信时出现问题。http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#502
2013/02/12 07:36:16[错误]32401#0:*1948从上游读取响应标头时,上游过早关闭连接
Nginx错误日志告诉您Nginx实际上能够连接到配置的上游,但进程在(完全)收到答案之前关闭了连接。
您的开发环境:
在15663ms 中完成200 OK
显然,您需要大约15秒才能在开发机器上生成响应。
与proxy_connect_timeout不同,此超时将捕获服务器将您放入它的连接池中,但不会用除此之外的任何事情。但要小心,不要把它设置得太低,因为您的代理服务器可能需要更长的时间来响应上的请求目的(例如,当为您提供需要一些时间计算)。不过,您可以根据location,它使您能够对具有更高的proxy_read_timeout报表页面的位置。
http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout
在nginx端,proxy_read_timeout默认为60秒,因此这是安全的
我不知道ruby(在rails上)是如何工作的,请查看错误日志-超时发生在堆栈的那个部分