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 ​​(на рельсах), проверьте журнал ошибок - тайм-аут происходит в этой части вашего стека

Другие вопросы по тегам