502 ошибка nginx + ruby на рельсах
Детали приложения:
Rails 3.1.0
Ruby 1.9.2
единорог 4.2.0
Resque 1.20.0
Nginx/1.0.14
Redis 2.4.8
Я использую гем active_admin, для всех 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
не знаю, что происходит, может мне поможет какой-нибудь приятель.
1 ответ
У вас проблема с тайм-аутом.
Решая это
HTTP/1.1 502 Bad Gateway
Указывает на то, что у nginx была проблема, чтобы поговорить с его настроенным апстримом. http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
2013/02/12 07:36:16 [ошибка] 32401#0: *1948 восходящее преждевременно закрытое соединение при чтении заголовка ответа из восходящего потока
Журнал ошибок Nginx сообщает, что Nginx действительно смог подключиться к настроенному восходящему каналу, но процесс закрыл соединение до того, как ответ был (полностью) получен.
Ваша среда разработки:
Завершено 200 ОК за 15663 мс
По-видимому, вам нужно около 15 секунд, чтобы сгенерировать ответ на вашем компьютере разработчика.
В отличие от proxy_connect_timeout, этот тайм-аут поймает сервер, который помещает вас в свой пул соединений, но не отвечает вам чем-либо еще. Будьте осторожны, но не устанавливайте это значение слишком низким, так как вашему прокси-серверу может потребоваться больше времени, чтобы преднамеренно отвечать на запросы (например, при предоставлении вам страницы отчета, для вычисления которой требуется некоторое время). Тем не менее, вы можете иметь разные настройки для каждого местоположения, что позволяет иметь более высокий proxy_read_timeout для местоположения страницы отчета.
http://wiki.nginx.org/HttpProxyModule
На стороне nginx значение proxy_read_timeout по умолчанию составляет 60 секунд, так что это безопасно
Я понятия не имею, как работает ruby (на рельсах), проверьте журнал ошибок - тайм-аут происходит в этой части вашего стека